Nach Update auf Shopware 6.6.2.0 können Artikel nicht mehr in den Warenkorb gelegt werden

Hallo Liebe Community!

Ich habe nach dem letzten Shopware Update (auf die Verison 6.6.2.0) das Problem, dass sich Aritkel nicht mehr in den Warenkorb legen lassen.

In der Console wird ein JS Fehler geloggt:

plugin_header_search-widget_plugin_js.js:1
POST /checkout/line-item/add 500 (Internal Server Error)

Und in den Logs finde ich folgende Fehlermeldung die auf ein Problem in der Datenbank hinweist:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (datenbank.cart, CONSTRAINT fk.cart.country_id FOREIGN KEY (country_id) REFERENCES country (id) ON DELETE CASCADE ON UPDATE CASCADE)" at ExceptionConverter.php line 56

Hat hier jemand eine Idee wie ich das Problem beheben kann? Ich hatte bereits in die DB geschaut und dort scheinen die Tabellen sowie die Country ID Werte in Ordnung.

Danke vorab und schöne Grüße
Jannik

Dann schau mal in deinem SQL Log nach, welche Query mit welchen konkreten Daten fehl schlägt.

Cache im Shop als auch im Browser geleert?

Danke für deine schnelle Rückmeldung!
Der SQL Log wird aktuell noch nicht geschrieben. Ich bin hinterher, dass dieser vom Hoster aktiviert wird.
Cache im Browser sowie vom Shop ist gelöscht.

Hast du noch weitere Ideen oder müssen wir erstmal die Logs abwarten?

Kannst die Tabelle ja mal leeren und schauen ob der Fehler dann weg ist.

Welche der beiden Tabellen meinst du? Die cart oder die country Tabelle? Die Cart Tabelle habe ich schon geleert.

Nur die cart Tabelle. Country wäre nicht so ratsam :wink:

Du hast aber nicht zwischenzeitlich Datensätze aus der country Tabelle gelöscht oder?

Der Fehler hört sich für mich danach an, dass in in der Spalte country_id eine ID geschrieben wird, die in der Tabelle country nicht mehr existent ist.

Deswegen noch mal die Frage :wink:
Ich habe nur die Datensätze in der Tabelle Cart gelöscht. Die Tabelle Country hatte ich nicht angefasst. Bevor ich das gemacht habe, hatte ich die IDs zwischen den beiden Tabellen verglichen. Da waren die IDs in der Tabelle Cart so in der Tabelle Country zu finden - also soweit so gut.

Welche ID jetzt beim in den Warenkorb legen geschrieben wird bekommt man nur mit den SQL Logs heraus? Oder gibt es hier noch eine andere Möglichkeit?

Anhand des XHR Headers beim in den Warenkorb legen könntest du ggf. die relevanten Daten finden. Bin mir da aber nicht sicher.

Das habe ich jetzt auch einmal geprüft. Leider stehen die relevanten Daten nicht dabei.
Der Hoster kann scheinbar nicht die SQL Logs aktivieren. Ich hoffe noch darauf, dass dieser mir zumindest einen Ausschnitt davon zusenden kann.
Hat jemand noch andere Ideen? Kann man die country Tabelle ggf. einmal neu befüllen?

Theoretisch ja, aber die IDs werden zufällig erstellt, das würde Dir nicht helfen, sondern noch mehr Probleme verursachen. Hast Du ein Backup der DB von vor dem Update? Kannst Du in der DB mal folgendes abfragen?

SELECT count(*) FROM country;

Bei meiner Testinstallation (6.6.2.0) kommt da 250 raus.

Okay, verstehe.
Wenn ich die SQL ausführe kommt auch 250 heraus.

Was mir gerade noch einfällt: bei dem Update hatte ich anfangs auch Probleme mit Paypal. Ich musste erst einmal Paypal deaktivieren/aktivieren und auch das Plugin einmal komplett überschreiben. Danach ging es erst wieder. Aktuell habe ich aber das Paypal Plugin vollständig deaktiviert. Daher gehe ich nicht davon aus das es hiermit was zu tun haben könnte.

Habe eben mal geschaut, in meinem 6.5.8.7 gibt es den foreign key fk.cart.country_id noch, im 6.6.2.0 nicht mehr. Anscheinend wurde der nicht entfernt…

6.5.8.7

+----------------------------------+------------------------------------+
| token                            | country_id                         |
+----------------------------------+------------------------------------+
| F9HtKR3XuLJbVBwwCvKZnGcvn6wfr24h | 0x78AA90EBB3F74EE79843CDB0D6C59C41 |
| kiqbMArvp3GXvM7t2kFRfX3vqYWBFPdx | 0x78AA90EBB3F74EE79843CDB0D6C59C41 |
| 018df50294dd7194abd22ecf11f996bf | 0x8342A18A45EA4CD0AF20770E86229E1D |
| 0ABWqligyhqvHvgWmzMgCE5xtdSALVTo | 0x8342A18A45EA4CD0AF20770E86229E1D |
| 0wvnT9WtWn6vnSe8P1nuiqaMb3IkZ97w | 0x8342A18A45EA4CD0AF20770E86229E1D |
+----------------------------------+------------------------------------+

6.6.2.0

+----------------------------------+------------------------+
| token                            | country_id             |
+----------------------------------+------------------------+
| 0W3y6gD2UyadlX3ZONNKqNag6mQFPXCQ | 0x                     |
| CSIZxeCHvMQ1Unl4eez9kO3p6xD7s7Ip | 0x                     |
| OQj06mWKSsoCJa89hT02FYMZfCFyulVx | 0x                     |
| Pw7DOgdyI3sRN8NtvuAhjfckajAGChms | 0x                     |
| R9ajoyqlAjEacTdqaYsJKqqL1bICTCON | 0x                     |
+----------------------------------+------------------------+

Danke für deine Analyse! Sollte ich jetzt versuchen den fk.cart.country_id zu entfernen?

Ja, Backup machen und entfernen. Oder, wenn Du die Tabelle verwerfen kannst, das hier ist die aus dem 6.6.2.0:

CREATE TABLE `cart` (
  `token` varchar(50) NOT NULL,
  `price` float DEFAULT NULL,
  `line_item_count` varchar(42) DEFAULT NULL,
  `currency_id` binary(16) DEFAULT NULL,
  `shipping_method_id` binary(16) DEFAULT NULL,
  `payment_method_id` binary(16) DEFAULT NULL,
  `country_id` binary(16) DEFAULT NULL,
  `customer_id` binary(16) DEFAULT NULL,
  `sales_channel_id` binary(16) DEFAULT NULL,
  `rule_ids` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`rule_ids`)),
  `created_at` datetime(3) NOT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `auto_increment` bigint(20) NOT NULL AUTO_INCREMENT,
  `compressed` tinyint(1) NOT NULL DEFAULT 0,
  `payload` longblob DEFAULT NULL,
  PRIMARY KEY (`token`),
  UNIQUE KEY `auto_increment` (`auto_increment`),
  KEY `idx.cart.created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

denn da sind noch andere Foreign keys (currency_id, customer_id usw.), die vermutlich auch Probleme machen. Schau Dir mal die vendor/shopware/core/Migration/V6_6/Migration1707064042CartRemoveFK.php an, da sind alle Felder und Foreign Keys aufgeführt, die entfernt wurden. Anscheinend wurde die bei Dir nicht ausgeführt.

@Anotherone mega, ich danke dir! Das war tatsächlich der Fehler. Warum auch immer die Änderungen an der DB Tabelle nicht gemacht wurden…
Das löschen und neu erstellen der cart Tabelle hat aber geholfen. Tausend Dank!

Vielen , vielen Dank. Habe die Anleitung genutzt! Läuft!

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.