From 7c2ad165e4ed26b79a683261fa925705ebdf2916 Mon Sep 17 00:00:00 2001 From: r-dev Date: Sun, 5 Apr 2026 17:29:33 +0200 Subject: [PATCH] fix(migration) : migrate constructeur links from legacy M2M tables to new link entities --- ...rsion20260405_MigrateConstructeurLinks.php | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 migrations/Version20260405_MigrateConstructeurLinks.php diff --git a/migrations/Version20260405_MigrateConstructeurLinks.php b/migrations/Version20260405_MigrateConstructeurLinks.php new file mode 100644 index 0000000..37f5143 --- /dev/null +++ b/migrations/Version20260405_MigrateConstructeurLinks.php @@ -0,0 +1,89 @@ +addSql(" + INSERT INTO composant_constructeur_links (id, composantid, constructeurid, supplierreference, createdat, updatedat) + SELECT + 'clmig_cc_' || ROW_NUMBER() OVER (ORDER BY a, b), + a, b, NULL, NOW(), NOW() + FROM _composantconstructeurs + WHERE NOT EXISTS ( + SELECT 1 FROM composant_constructeur_links + WHERE composantid = _composantconstructeurs.a + AND constructeurid = _composantconstructeurs.b + ) + "); + + // Piece links + $this->addSql(" + INSERT INTO piece_constructeur_links (id, pieceid, constructeurid, supplierreference, createdat, updatedat) + SELECT + 'clmig_pc_' || ROW_NUMBER() OVER (ORDER BY a, b), + a, b, NULL, NOW(), NOW() + FROM _piececonstructeurs + WHERE NOT EXISTS ( + SELECT 1 FROM piece_constructeur_links + WHERE pieceid = _piececonstructeurs.a + AND constructeurid = _piececonstructeurs.b + ) + "); + + // Machine links + $this->addSql(" + INSERT INTO machine_constructeur_links (id, machineid, constructeurid, supplierreference, createdat, updatedat) + SELECT + 'clmig_mc_' || ROW_NUMBER() OVER (ORDER BY a, b), + a, b, NULL, NOW(), NOW() + FROM _machineconstructeurs + WHERE NOT EXISTS ( + SELECT 1 FROM machine_constructeur_links + WHERE machineid = _machineconstructeurs.a + AND constructeurid = _machineconstructeurs.b + ) + "); + + // Product links + $this->addSql(" + INSERT INTO product_constructeur_links (id, productid, constructeurid, supplierreference, createdat, updatedat) + SELECT + 'clmig_prc_' || ROW_NUMBER() OVER (ORDER BY a, b), + a, b, NULL, NOW(), NOW() + FROM _productconstructeurs + WHERE NOT EXISTS ( + SELECT 1 FROM product_constructeur_links + WHERE productid = _productconstructeurs.a + AND constructeurid = _productconstructeurs.b + ) + "); + } + + public function down(Schema $schema): void + { + // Remove only the migrated rows (identifiable by 'clmig_' prefix) + $this->addSql("DELETE FROM composant_constructeur_links WHERE id LIKE 'clmig_cc_%'"); + $this->addSql("DELETE FROM piece_constructeur_links WHERE id LIKE 'clmig_pc_%'"); + $this->addSql("DELETE FROM machine_constructeur_links WHERE id LIKE 'clmig_mc_%'"); + $this->addSql("DELETE FROM product_constructeur_links WHERE id LIKE 'clmig_prc_%'"); + } +}