query("SELECT id FROM operations"); $migratedOperations = $stmt->fetchAll(PDO::FETCH_COLUMN); if (empty($migratedOperations)) { echo "Aucune opération n'a été migrée. Veuillez d'abord migrer la table operations." . PHP_EOL; closeSshTunnel(); exit(1); } echo "Nombre d'opérations migrées : " . count($migratedOperations) . PHP_EOL; // Récupération des IDs des utilisateurs qui ont été migrés $stmt = $targetDb->query("SELECT id FROM users"); $migratedUsers = $stmt->fetchAll(PDO::FETCH_COLUMN); if (empty($migratedUsers)) { echo "Aucun utilisateur n'a été migré. Veuillez d'abord migrer la table users." . PHP_EOL; closeSshTunnel(); exit(1); } echo "Nombre d'utilisateurs migrés : " . count($migratedUsers) . PHP_EOL; // Création de la liste des IDs d'opérations pour la requête IN $operationIds = implode(',', $migratedOperations); // Création de la liste des IDs d'utilisateurs pour la requête IN $userIds = implode(',', $migratedUsers); // Récupération des associations utilisateurs-opérations depuis la base source // Ne récupérer que les associations qui concernent à la fois des opérations et des utilisateurs migrés $query = "SELECT * FROM ope_users WHERE fk_operation IN ($operationIds) AND fk_user IN ($userIds)"; $stmt = $sourceDb->query($query); $opeUsers = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "Nombre d'associations utilisateurs-opérations à migrer : " . count($opeUsers) . PHP_EOL; // Préparation de la requête d'insertion $insertQuery = "INSERT INTO ope_users ( id, fk_operation, fk_user, created_at, fk_user_creat, updated_at, fk_user_modif, chk_active ) VALUES ( :id, :fk_operation, :fk_user, :created_at, :fk_user_creat, :updated_at, :fk_user_modif, :chk_active ) ON DUPLICATE KEY UPDATE fk_operation = VALUES(fk_operation), fk_user = VALUES(fk_user), updated_at = VALUES(updated_at), fk_user_modif = VALUES(fk_user_modif), chk_active = VALUES(chk_active)"; $insertStmt = $targetDb->prepare($insertQuery); // Compteurs $inserted = 0; $errors = 0; // Traitement de chaque association utilisateur-opération foreach ($opeUsers as $opeUser) { // Mappage des champs $id = isset($opeUser['rowid']) ? $opeUser['rowid'] : $opeUser['id']; $chkActive = isset($opeUser['active']) ? $opeUser['active'] : (isset($opeUser['chk_active']) ? $opeUser['chk_active'] : 1); // Gestion des dates $createdAt = isset($opeUser['date_creat']) && !empty($opeUser['date_creat']) ? date('Y-m-d H:i:s', strtotime($opeUser['date_creat'])) : date('Y-m-d H:i:s'); $updatedAt = isset($opeUser['date_modif']) && !empty($opeUser['date_modif']) ? date('Y-m-d H:i:s', strtotime($opeUser['date_modif'])) : null; // Préparation des données pour l'insertion $opeUserData = [ 'id' => $id, 'fk_operation' => $opeUser['fk_operation'], 'fk_user' => $opeUser['fk_user'], 'created_at' => $createdAt, 'fk_user_creat' => $opeUser['fk_user_creat'] ?? 0, 'updated_at' => $updatedAt, 'fk_user_modif' => $opeUser['fk_user_modif'] ?? 0, 'chk_active' => $chkActive ]; try { // Insertion dans la table cible $insertStmt->execute($opeUserData); $inserted++; // Affichage du progrès if ($inserted % 100 === 0) { echo "Progression : $inserted associations utilisateurs-opérations migrées..." . PHP_EOL; } } catch (PDOException $e) { echo "Erreur lors de la migration de l'association utilisateur-opération ID $id : " . $e->getMessage() . PHP_EOL; $errors++; } } echo "Migration terminée. $inserted associations utilisateurs-opérations migrées avec succès. $errors erreurs rencontrées." . PHP_EOL; // Fermer le tunnel SSH closeSshTunnel(); } catch (Exception $e) { echo "Erreur critique: " . $e->getMessage() . PHP_EOL; // Fermer le tunnel SSH en cas d'erreur closeSshTunnel(); exit(1); }