get()->keyBy('c_clave_unidad'); // Un array para almacenar las nuevas unidades que vamos a insertar $nuevasUnidades = []; // Insertar o actualizar las unidades de medida foreach ($data['units'] as $unidad) { if (!isset($unidad['c_clave_unidad']) || trim($unidad['c_clave_unidad']) == '') { continue; // Ignorar si 'c_clave_unidad' es nulo o vacío } // Verificamos si la unidad ya existe if (!isset($unidadesExistentes[$unidad['c_clave_unidad']])) { $nuevasUnidades[] = [ 'c_clave_unidad' => $unidad['c_clave_unidad'], 'nombre' => $unidad['nombre'], 'simbolo' => $unidad['simbolo'] ?? null, 'categoria' => $unidad['categoria'] ?? null, 'is_base' => false, // Define la lógica para is_base 'created_at' => now(), 'updated_at' => now(), ]; } } // Insertar todas las nuevas unidades en un solo paso if (!empty($nuevasUnidades)) { DB::table('sat_clave_unidad')->insert($nuevasUnidades); } // Volver a cargar las unidades existentes para las conversiones $unidadesExistentes = DB::table('sat_clave_unidad')->get()->keyBy('c_clave_unidad'); // Preparar un array para las conversiones a insertar $nuevasConversiones = []; // Asegúrate de que 'conversions' existe en $data if (isset($data['conversions'])) { foreach ($data['conversions'] as $conversion) { $origen = $unidadesExistentes[$conversion['from_unit']] ?? null; $destino = $unidadesExistentes[$conversion['to_unit']] ?? null; // Solo insertar si ambos IDs existen if ($origen && $destino) { $nuevasConversiones[] = [ 'clave_unidad_origen_id' => $origen->id, 'clave_unidad_destino_id' => $destino->id, 'conversion_factor' => $conversion['factor'], 'created_at' => now(), 'updated_at' => now(), ]; } } // Insertar todas las conversiones en un solo paso if (!empty($nuevasConversiones)) { DB::table('sat_clave_unidad_conversiones')->insert($nuevasConversiones); } } } }