Nach Update auf 6.5.3.3: InvalidFieldNameException Unknown column 'vat_id' in 'NEW'

Dieser Fehler erscheint bei jedem Versuch ein Kundenkonto oder eine Gastbestellung anzulegen. Im Frontend erscheint die Meldung „Leider ist etwas schief gelaufen.“. Lediglich Bestellungen über existierende Konten funktionieren.

request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\InvalidFieldNameException: „An exception occurred while executing a query: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‚vat_id‘ in ‚NEW‘“ at /var/www/httpdocs/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php line 67 {„exception“:„[object] (Doctrine\DBAL\Exception\InvalidFieldNameException(code: 1054): An exception occurred while executing a query: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‚vat_id‘ in ‚NEW‘ at /var/www/httpdocs/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php:67)\n[previous exception] [object] (Doctrine\DBAL\Driver\PDO\Exception(code: 1054): SQLSTATE[42S22]: Column not found: 1054 Unknown column ‚vat_id‘ in ‚NEW‘ at /var/www/httpdocs/vendor/doctrine/dbal/src/Driver/PDO/Exception.php:28)\n[previous exception] [object] (PDOException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column ‚vat_id‘ in ‚NEW‘ at /var/www/httpdocs/vendor/doctrine/dbal/src/Driver/PDO/Connection.php:32)“} [ ]

Weitere Auffälligkeit bisher: Exports starten zwar, aber machen nie einen Fortschritt.

Wir haben bereits alle Fremderweiterungen deaktiviert, führt aber zum selben Ergebnis.

Jemand eine Idee, wie wir hier vorgehen können? Da als Collection „NEW“ angegeben ist, sind die Daten noch nicht auf DB persistiert. Eine fehlende Tabellen-Spalte kann es also nicht sein.

Die Spalte heißt „vat_ids“ und nicht „vat_id“.

Irgendwas (eigenes Plugin?) musst du im System haben, was versucht auf die falsche Spalte zuzugreifen, welche ja nicht existiert… oder hast du im Export die falsche Spalte drin, dass das vielleicht zu dem Fehler führt?

Eigene Plugins sind nicht im Einsatz, auch hatte ich alle Fremdplugins (alle ohne Swag*) deaktiviert.

Im Core zeigt sich OrderAddressDefinition ohne s, CustomerDefinition und OrderCustomerDefinition mit s:

./shopware/core/Checkout/Order/Aggregate/OrderAddress/OrderAddressDefinition.php:            (new StringField('vat_id', 'vatId'))->addFlags(new ApiAware()),
./shopware/core/Checkout/Customer/CustomerDefinition.php:            (new ListField('vat_ids', 'vatIds', StringField::class))->addFlags(new ApiAware()),
./shopware/core/Checkout/Order/Aggregate/OrderCustomer/OrderCustomerDefinition.php:            (new ListField('vat_ids', 'vatIds', StringField::class))->addFlags(new ApiAware()),

Was auch immer den Fehler auslöst, muss versuchen einen Customer oder einen OrderCustomer anzulegen.

Dennoch habe ich danach gesucht und 3 Plugins gefunden, die vat_id verwenden:

./plugins/KlarnaPayment/src/Components/Client/Struct/Customer.php:            'vat_id'        => $this->getVatId(),
./plugins/NetzpStaging6/src/Components/Anonymizer.php:                else if($colName == 'vat_id') {
./plugins/MoorlFoundation/src/Core/Framework/DataAbstractionLayer/Collection/FieldCompanyCollection.php:            (new StringField('vat_id', 'vatId'))->addFlags(new EditField('text')),
./plugins/KlarnaPayment/src/Components/Client/Struct/Customer.php:    public function getVatId(): ?string
./plugins/KlarnaPayment/src/Components/Client/Struct/Customer.php:            'vat_id'        => $this->getVatId(),
./plugins/KlarnaPayment/src/Components/Client/Hydrator/Struct/Customer/CustomerStructHydrator.php:            'vatId' => method_exists($billingAddress, 'getVatId') ? $billingAddress->getVatId() : $customer->getVatId(),
./plugins/MoorlFoundation/src/Core/Framework/DataAbstractionLayer/EntityCompanyTrait.php:    public function getVatId(): ?string
./plugins/MoorlFoundation/src/Core/Framework/DataAbstractionLayer/EntityCompanyTrait.php:    public function setVatId(?string $vatId): void

NetzpStaging6 fällt raus, weil nur in einer if-Statement als String genutzt.
KlarnaPayment und @Moorleiche 's Foundation sind bei tausenden Nutzern im Einsatz… oder stehe ich irgendwo auf dem Schlauch?

Selbstverständlich sind alle Plugins auf dem neuesten Stand.

Bezüglich des Exports läuft auch mit dem Standardprofil Produkt und Standardprofil Kategorie (beide unverändert) nichts.

Das Plugin von Klarna hat so eine Spalte nicht und das Foundation nutzt diese Spalte z.B. bei Händlern (CustomEntity). Es gibt nur die Tabelle „order_address“ wo diese vorkommt. „customer_address“ ist ausgeschlossen.

Ich gehe auch nicht davon aus, dass es an den Plugins liegt. Denn die hatte ich alle deaktiviert und bekam den selben Fehler. Sofern Shopware diese auch sauber abschaltet bei einer Deaktivierung, wären diese als Ursache ausgeschlossen.

Bei uns muss sich irgendeine Konstellation an Shopware selbst ergeben haben, die wir nicht nachvollziehen können.

Dann schau doch mal in die Datenbanktabelle ob das Feld dort vorhanden ist.

Aber in welcher Tabelle? Die Meldung lautet ja Unknown column ‚vat_id‘ in ‚NEW‘“ was darauf hindeutet, dass in dem Moment noch nicht persistiert wurde, also noch nicht auf DB geschrieben wurde.
Oder bin ich da auf einem Irrweg?

„NEW“ kann auch in einem Trigger verwendet werden…

Schaue mal in deiner Datenbank nach Triggern. :thinking:

An Trigger habe ich überhaupt nicht mehr gedacht.
Es gibt 2 Trigger (customer_address_vat_id_insert, customer_address_vat_id_update) auf die Tabelle customer_address. Beide Trigger wurden schon mit Shopware v6.3 eingeführt.
Allerdings ist in meiner customer_address kein Feld vat_id vorhanden, auch kein vat_ids.

Ich habe in meinen alten Backups nachgeschaut und in der Version 6.4.20.1 war das Feld vat_id noch vorhanden:
vat_id varchar(50) DEFAULT NULL,
In v6.5.2.1 nicht mehr.

Folglich hätten beim Update auch die Trigger verschwinden müssen, was sie aber nicht sind. Beim Update ist mir auch keine Fehlermeldung aufgefallen. Die Migration Logs werden nicht zufällig irgendwo abgelegt?

Um den Fehler abzufangen habe ich die Spalte vat_id angelegt. …mit Erfolg! :smiley:
Nach abschließender Klärung, wie es dazu kam, lösche ich die alten Trigger.

1 „Gefällt mir“

Laut Shopware Support blieben nur noch die Einträge im Shopware- und Server-Log. Darin lässt sich aber nichts mit Hinweis auf die beiden Trigger finden. Falls sich Probleme durch das Löschen der Trigger ergeben, werde ich es hier notieren.