Hallo liebe Community,
ich habe im Moment bei mehreren Shops dasselbe Problem, dass ich nicht von 6.4.20.2 auf 6.5.0.0 updaten kann. Hier kommt immer derselbe SQL Fehler während des Updates:
SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP FOREIGN
KEY `fk.customer_address.salutation_id`; check that it exists
Der Key selbst existiert glaube ich auch - siehe Screenshot
Wenn ich den Befehl aus dem Update manuell im phpmyadmin ausführe bekomme ich folgenden Fehler:
Plugins und Themes habe ich natürlich alle vor dem Start des Updates deaktiviert.
Der Fehler tritt sowohl bei einer MySQL als auch bei einer MariaDB Datenbank auf.
Hatte hier jemdand schon dasselbe Problem und hat jemand eine Lösung für mich?
Ok nach weiteren Tests habe ich herausgefunden, dass das Shopware Update einen Key entfernen möchte der bereits entfernt wurde…
Um nun das Update erfolgreich durchführen zu können, muss der Key vor dem Update eingefügt werden.
Der SQL Befehl dafür lautet wie folgt:
ALTER TABLE `customer_address` ADD CONSTRAINT `fk.customer_address.salutation_id` FOREIGN KEY ( `salutation_id` ) REFERENCES `salutation` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
Bei einem weiteren Updateversuch stellt man dann fest, das die salutation_id nicht nur in der customer_address Tabelle fehlt sondern auch in customer, order_customer, order_address und newsletter_recipient. Man kann diese auch in der Migrationsdatei unter \vendor\shopware\Core\Migration\V6_5\Migration1673420896RemoveUndefinedSalutation.php finden.
Daher sollte man auch diese SQL-Befehle in der Datenbank ausführen:
ALTER TABLE `customer` ADD CONSTRAINT `fk.customer.salutation_id` FOREIGN KEY ( `salutation_id` ) REFERENCES `salutation` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
ALTER TABLE `order_customer` ADD CONSTRAINT `fk.order_customer.salutation_id` FOREIGN KEY ( `salutation_id` ) REFERENCES `salutation` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
ALTER TABLE `order_address` ADD CONSTRAINT `fk.order_address.salutation_id` FOREIGN KEY ( `salutation_id` ) REFERENCES `salutation` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
ALTER TABLE `newsletter_recipient` ADD CONSTRAINT `fk.newsletter_recipient.salutation_id` FOREIGN KEY ( `salutation_id` ) REFERENCES `salutation` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
Danach lief das Update bei mir problemlos durch.
1 „Gefällt mir“
Für diejenigen, die auch auf 6.5.4.1 updaten wollen und dasselbe Problem wie oben beschrieben haben:
Folgende SQL Befehle in der Datenbank ausführen:
ALTER TABLE `customer` ADD CONSTRAINT `fk.customer.created_by_id` FOREIGN KEY ( `created_by_id` ) REFERENCES `user` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
ALTER TABLE `customer` ADD CONSTRAINT `fk.customer.updated_by_id` FOREIGN KEY ( `updated_by_id` ) REFERENCES `user` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
ALTER TABLE `order` ADD CONSTRAINT `fk.order.created_by_id` FOREIGN KEY ( `created_by_id` ) REFERENCES `user` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
ALTER TABLE `order` ADD CONSTRAINT `fk.order.updated_by_id` FOREIGN KEY ( `updated_by_id` ) REFERENCES `user` ( `id` ) ON DELETE SET NULL ON UPDATE NO ACTION;
Ansonsten gibt es hier wieder eine Fehlermeldung, dass diese Keys nicht gedropped werden können.
1 „Gefällt mir“
Für diejenigen, die auch auf 6.5.8.0 updaten wollen und dasselbe Problem wie oben beschrieben haben:
Folgende SQL Befehle in der Datenbank ausführen:
ALTER TABLE `order_transaction_capture_refund` ADD CONSTRAINT `fk.order_transaction_capture_refund.capture_id` FOREIGN KEY ( `capture_id` ) REFERENCES `capture` ( `id` ) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `order_transaction_capture_refund_position` ADD CONSTRAINT `fk.order_transaction_capture_refund_position.refund_id` FOREIGN KEY ( `refund_id` ) REFERENCES `refund` ( `id` ) ON DELETE CASCADE ON UPDATE CASCADE;
Ansonsten gibt es hier wieder eine Fehlermeldung, dass diese Keys nicht gedropped werden können.