Shopware 5.6 | Migrationstool Errors and Fixes

Moin Moin,

Ausgangspunkt meiner Frage ist das man Versucht einen etwas größeren Magento 1.9.3.6 Shop auf Shopware 5.6 zu migrieren.

Alle Punkte bis auf Kunden(Timeout), Bestellungen(Timeout) und Produkte konnte ich bereits umziehen.

Nun sitze ich bereits seit zwei tagen vor dem Problem das ich immer wieder, trotz vollständigem Mapping, die folgende Fehlermeldung erhalte.

Environment: Ubuntu 18.04.01, PHP 7.2.19, MySQL Server 5.7.27-0ubuntu0.18.04.1 - (Ubuntu)

Code : 21
Line : 224
File : /storage/web/sallys/engine/Library/Zend/Db/Statement/Pdo.php

Error : SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
Trace : #0 /storage/web/sallys/engine/Library/Zend/Db/Statement.php(297): Zend_Db_Statement_Pdo->_execute(Array) 
#1 /storage/web/sallys/engine/Library/Zend/Db/Adapter/Abstract.php(472): Zend_Db_Statement->execute(Array) 
#2 /storage/web/sallys/engine/Library/Zend/Db/Adapter/Pdo/Abstract.php(232): Zend_Db_Adapter_Abstract->query('INSERT INTO s_a...', Array) 
#3 /storage/web/sallys/engine/Library/Enlight/Components/Db/Adapter/Pdo/Mysql.php(83): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO s_a...', Array) 
#4 /storage/web/sallys/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/DbServices/Import/ArticleImporter.php(1064): Enlight_Components_Db_Adapter_Pdo_Mysql->query('INSERT INTO s_a...') 
#5 /storage/web/sallys/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/DbServices/Import/ArticleImporter.php(170): Shopware\SwagMigration\Components\DbServices\Import\ArticleImporter->setArticleAttributes(Array) 
#6 /storage/web/sallys/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/DbServices/Import/Import.php(117): Shopware\SwagMigration\Components\DbServices\Import\ArticleImporter->import(Array) #7 /storage/web/sallys/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/Migration/Import/Resource/Product.php(277): Shopware\SwagMigration\Components\DbServices\Import\Import->article(Array) #8 /storage/web/sallys/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/Migration/Import/Resource/Product.php(116): Shopware\SwagMigration\Components\Migration\Import\Resource\Product->migrateProduct(Array, 'complain', Object(Enlight_Components_Db_Adapter_Pdo_Mysql), Object(Shopware\SwagMigration\Components\DbServices\Import\Import), 'Die Produkt-Num...', Array) 
#9 /storage/web/sallys/engine/Shopware/Plugins/Community/Backend/SwagMigration/Controllers/Backend/SwagMigration.php(444): Shopware\SwagMigration\Components\Migration\Import\Resource\Product->run() 
#10 /storage/web/sallys/engine/Shopware/Plugins/Community/Backend/SwagMigration/Controllers/Backend/SwagMigration.php(479): Shopware_Controllers_Backend_SwagMigration->runImport('import_products') 
#11 /storage/web/sallys/engine/Library/Enlight/Controller/Action.php(192): Shopware_Controllers_Backend_SwagMigration->importAction() 
#12 /storage/web/sallys/engine/Library/Enlight/Controller/Dispatcher/Default.php(478): Enlight_Controller_Action->dispatch('importAction') 
#13 /storage/web/sallys/engine/Library/Enlight/Controller/Front.php(228): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp)) 
#14 /storage/web/sallys/engine/Shopware/Kernel.php(184): Enlight_Controller_Front->dispatch() 
#15 /storage/web/sallys/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php(102): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) 
#16 /storage/web/sallys/vendor/symfony/http-kernel/HttpCache/HttpCache.php(448): Symfony\Component\HttpKernel\HttpCache\SubRequestHandler::handle(Object(Shopware\Kernel), Object(Symfony\Component\HttpFoundation\Request), 1, true)
#17 /storage/web/sallys/engine/Shopware/Components/HttpCache/AppCache.php(256): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL) 
#18 /storage/web/sallys/vendor/symfony/http-kernel/HttpCache/HttpCache.php(238): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true) 
#19 /storage/web/sallys/engine/Shopware/Components/HttpCache/AppCache.php(99): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true) 
#20 /storage/web/sallys/shopware.php(122): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request)) 
#21 {main}

Es sei dazu gesagt das mir die Meldung grundweg genug  sagt um zu wissen wo ich zwecks debugging gucken muss, allerdings denke ich nicht das es der richtige weg ist den SourceCode des Plugins anzufassen.

Selbst wenn alle eingetragenen DB Felder in dem mapping verwendet werden bleibt die Fehlermeldung gleich.

Ich würde mich freuen wenn jemand vielleicht einen Tipp oder eine weitere Idee hat woran bzw warum die Meldung auftritt.

Danke & Grüße,

dasLueders

Weitere Erkenntnis. Sobald ich das Mapping innerhalb der MIgration entferne, wqerden zwar Produkte übernommen allerdings sind diese dann nicht auf findbar.

Sprich, sie sind in der Datenbank aber nicht innerhalb der Artikelübersicht.

Kann aber auch mit der Magento Version zusammenhängen - lt. Beschreibung ist die Migration nur bis 1.9.3.4 kompatibel:

https://store.shopware.com/swag00426f/migration-von-anderen-shopsystemen-zu-shopware.html

Ich könnte mir vorstellen, dass sich vielleicht etwas an der Quelldatenbank geändert hat, was das Plugin nun nicht mehr korrekt erfassen kann. Eine Alternative könnte hier das Import / Export Plugin sein, damit du via CSV die Dateien einpflegst.

LG Andre

Moin Andre,

Der Versionsunterschied ist mir bekannt.

---- Edited ----

Das Problem kann ich allerdings auschliessen. Der Shop ist abwärtskompatibel.

Ich teste jetzt den export via csv und dann import.


Ich bin mittlerweile soweit das ich sehe das im Mapping irgendwas nicht sauber läuft.

Das aktuell Insertstatement beinhaltet zweimal die selbe ID. Danach passt das mapping von den gesetzten Attributen.

INSERT INTO s_articles_attributes
(articledetailsID , attr1, attr2) VALUES
(23, 23 , '\\r\\n Modellierwerkzeug für Blüten & Blätter

Ich werde gleich mal schauen ob ich den Shop mit der DB auf 1.9.3.4 aufgesetzt bekomme um zu testen ob es der von dir vorgeschlagene Grund sein kann.

Ansonten scheine ich nicht darum herum zu kommen geringfügige Änderungen vorzu nehmen damit ich das Baby hier geschaukelt bekomme.

Nach dem nun weitere Tage vergangen sind konnte ich das Problem auf das Mapping der Artikel eingrenzen. Nun habe ich zwar artikel und Kategorien und all das in der Datenbank allerdings sind ide Artikel im Frontend nicht zu sehen, egal welchen Filter ich darauf anwende.

Gibt es noch einen extra Kniff den ich vergessen habe?

Muss der Import abgeschlossen werden?

Auf jeden fall kann ich sagen dass das MIgrationstool auch für V 1.9.3.6 in teilen funktioniert.

Aufgrund multipler Position innerhalb des Codes habe ich einen Fork des Tools angelegt und werde alle änderungen hier pushen

Ich werde versuchen diesen Thread aktuell zu halten.

Vielleicht guckt ja mal einer aus dem Dev-Team hier rein

  • fixed php buildIn copy function // workaround mit fopen & fwrite
1 Like

Hallo dasLueders,

wir würden uns freuen, wenn du einen PR für das Plugin erstellen würdest. Dadurch wird ja ein Problem gelöst, dass sicherlich auch noch andere haben werden. 

Viele Grüße aus Schöppingen

cool Michael Telgmann

@Michael Telgmann schrieb:

Hallo dasLueders,

wir würden uns freuen, wenn du einen PR für das Plugin erstellen würdest. Dadurch wird ja ein Problem gelöst, dass sicherlich auch noch andere haben werden. 

Viele Grüße aus Schöppingen

cool Michael Telgmann

 Moin Michael,

mache ich gerne wenn ich fertig bin.

Habe da noch etwas iritierendes mit dem Produktimport gefunden das ich gerne erst fixen würde.

So wie es scheint werden die Produkte solange nicht angezeigt bis in der Tabelle s_article_attributes ein Eintrag für selbige vorhanden ist.

Dran gedacht wurde im Tool nu anscheinend anders umgesetzt.

Wollte euch das eigentlich im Zuge eines Merge Requests zurück reichen.

Moin,

vielen Dank schon mal für deine Mithilfe. Wenn wir dich noch irgendwie unterstützen können, sag Bescheid. Du kannst dich gerne auch im Gitter Channel melden: shopware/shopwareDE - Gitter

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 Like

Dieses kleine Statement versorgt einen mit Produkten falls diese bei einer Migration nicht dargestellt werden.

Vorrraussetzung dafür ist allerdings das die Produkte generell in der Datenbank vorhanden sind

INSERT INTO s_articles_attributes (articledetailsID) SELECT id FROM s_articles_details

 

@Michael Telgmann schrieb:

Moin,

vielen Dank schon mal für deine Mithilfe. Wenn wir dich noch irgendwie unterstützen können, sag Bescheid. Du kannst dich gerne auch im Gitter Channel melden: https://gitter.im/shopware/shopwareDE

Viele Grüße aus Schöppingen

cool Michael Telgmann

Ich schaufel mich gerade durch das Tool durch.

Das fehllaufende multimapping ist auch noch so ein Fall für sich.

Danke für die Unterstüzung. Momentan ist Zeit mein größter Feind.

Wie steht ihr eigentlich zu sql transactions?

Grüße,

Jan

Hallo Jan,

grundsätzlich haben wir nichts gegen SQL Transactions  Wink
Wo würdest du die einsetzen?

Viele Grüße aus Schöppingen

cool Michael Telgmann

@Michael Telgmann schrieb:

Hallo Jan,

grundsätzlich haben wir nichts gegen SQL Transactions  Wink
Wo würdest du die einsetzen?

Viele Grüße aus Schöppingen

cool Michael Telgmann

Mein Gedanke war sie im Bereich der Kundendaten, Bestelllisten und sonst den Punkten mit großen Datenmengen einsetzten.

Der Import 78k Kunden kann weitaus schneller gehen und muss es auch asl 4 Stunden. Gleiches bei der Bestellhistorie.

Hört sich gut an  Thumb-Up

Hallo,

ich habe leider das gleiche Problem mit dem Migrationstool.

Wie kann ich denn deinen Branch in meine Shopware-Installation übernehmen ???

Viele Grüße

Mischa

@mischahaller schrieb:

Hallo,

ich habe leider das gleiche Problem mit dem Migrationstool.

Wie kann ich denn deinen Branch in meine Shopware-Installation übernehmen ???

Viele Grüße

Mischa

Moin Micha,

bei dem Column Count reicht es wenn du beim Migrieren erstmal keinerlei Felder mappst. So hat es bei mir funktioniert.

Die grundlegend Parameter wie Preis etc werden sauber zugeordnet.

Momentan war meine Mig mit den folgenden Schitten am erfolgreichsten:

Kategorien

Produkte + Images

Kundendaten

Bestellhistorie

 

den Rest habe ich aussen vor gelassen da ich ihn nicht brauchte.

 

Das Repro kannst du dir folgermaßen klonen

git clone git@github.com:janlueders/SwagMigration.git

Ich werde mich in der kommenden Woche dran setztne und den Rest wie Kunden und Bestellhistorie noch mal anfassen.

Ebenso wie das Imagemapping das noch nicht ganz sauber läuft.

Hallo,

vielen Dank erst mal!

wenn ich das richtig sehe ist das SQL-Statement Falsch:
$sql = „INSERT INTO s_articles_attributes (articledetailsID $columns) VALUES  ({$article[‚articleID‘]}, {$article[‚articledetailsID‘]} $values)“;

so wäre wohl richtig:

$sql = „INSERT INTO s_articles_attributes (articledetailsID $columns ) VALUES  ( {$article[‚articledetailsID‘]} $values)“;

In der Tabelle gibt es nur das Feld articledetailsID  als Frendschlüssel…

Auf jeden Fall konnte ich so zwei Attribute mappen.

Man muss allerdings vor jedem neuen Versuch die Tabellen s_articles, s_articles_details und s_articles_attributes leeren, ansonsten gibt es andere Fehlermeldungen.

Viele Grüße

Mischa

Moin Mischa,

bitte entschuldige die späte Rückmeldung

ja die Tabelle habe ich auch schon makiert als dringend. Der gesamte Artikelimport muss wie gesagt aufgrtäumt und angepasst werden.

Momentan ist der Bereich Orders in dem ich code und versuche ihn irgendwie gerade zu ziehen und auf Transactions umzubauen um Geschwindigkeit und Sicherheit was die Datenkonsitenz angeht zu erreichen.

Danke für das Statement. Ca. Donnerstag werde ich dazu kommen es anzupassen.

In der Datei CleanUp.php unter SwagMigration/Components/MIgration findest du die komplette Liste an Tabellen die man immer wieder leeren muss.

Grüße,

Jan

Kurzes Update.

Kunden/Bestell import aktuell im Test mit Transactions

Bestellimport erweitert um alle Bestellungen(auch ohne vorhandene Warenkörbe).

Der Import von Multiselect Attributen aus Magento (1.9) scheint auch nicht zu funktionieren.

1 Like