Das Update bricht ab, der Shop ist nicht erreichbar. habe diese auf einer Stage-Umgebung durchgeführt.
der Abbruch erfolgt ab’:
---------- ----------------------
Action Number of migrations
---------- ----------------------
Migrated 2 out of 13
---------- ----------------------
10:28:13 CRITICAL [console] Error thrown while running command "database:migrate core --all=1". Message: "
Migration error: An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`usrdb_xxl`.`#sql-d689e_5abc3a`, CONSTRAINT `fk.document.order_id` FOREIGN KEY (`order_id`, `order_version_id`) REFERENCES `order` (`id`, `version_id`) ON DELETE RESTRICT ON UPDATE CASCA)\n
Trace: \n
Ich vermute, das hier Zuordnungen von Bestellungen und deren Dokumente (bei uns wohl Rechnungen) nicht stimmen.
Die KI sagt mir, das wohl ausgerechnet hier Shopware bei diesem Update eine Änderung in der DB durchführt. Wie kann man das beheben? Muss man die betroffenen Bestellungen entfernen? Wie würdet Ihr vorgehen?
Ja, also wie gesagt, ich habe dieses erstmal in einer Stage-Umgebung durchgeführt. Das Live-System ist noch nicht geupdatet. Nach dem einspielen des BackUps läuft auch die Stage wieder. Noch jemand eine Idee?
Deine Schema bzw. Keys einer Tabelle sind nicht in Ordnung. Das heißt eine frühere Migration ist schon einmal nicht korrekt durchgeführt worden.
Der Vorschlag FK Check zu deaktivieren ist hier sicherlich nicht sinnvoll (und wird vermutlich auch nicht funktionieren), da du ja das Problem beheben möchtest und nicht einfach umgehen und ggf. noch mehr Probleme und kaputte Datensätze in der Zukunft haben möchtest.
Am besten einen leeren Shop installieren und Schauen, wie das Schema der Tabelle in der Version vor dem Update ist und diesen dann in der Live „erzeugen“ so dass das Update ohne Fehler durchläuft.
SELECT
LOWER(HEX(d.id)) AS document_id,
LOWER(HEX(d.order_id)) AS order_id,
LOWER(HEX(d.order_version_id)) AS order_version_id,
d.created_at
FROM `document` AS d
LEFT JOIN `order` AS o
ON o.id = d.order_id
AND o.version_id = d.order_version_id
WHERE d.order_id IS NOT NULL
AND d.order_version_id IS NOT NULL
AND o.id IS NULL;