Hallo Zusammen, seit kurzer Zeit kommt es bei einem Kunden von mir immer wieder zu doppelten Einträgen in der s_core_shops Tabelle. Die Einträge sind (bis auf die id) identische Kopien des Hauptshops. Leider führen die Mehrfacheinträge zu signifikanten Problemen und der Shop des Kunden ist in diesem Zustand nicht komplett funktionstüchtig. Sobald die doppelten Einträge entfernt wurden und ggbf. Lokalisierung neu gesetzt wurde, läuft der Shop wieder normal. Hat jemand von Euch dieses Phänomen vielleicht schon mal beobachtet und kann mir einen Tipp für die Ursache der duplicate Entries geben? Wäre für jeden Tipp dankbar… Gruß, MrMDeluxe
Das kann passieren, wenn Plugins unsauber geschrieben sind und ein Bestell- oder Zahlungsstatus innerhalb des Plugins gesetzt wird. Entweder deaktiviere / lösche das entsprechende Plugin - oder setze zb den Namen innerhalb der s_core_shops auf unique, um das Anlegen von Kopien zu verhindern. Viele Grüße
Hi, in Ergänzung zu der Antwort von Aquatuning: Das Problem tritt auch immer dann auf, wenn Plugins / Erweiterungen Entities persistieren und dabei das Shop-Model (Shopware()->Shop()) als Shop-Referenz angeben. Da das Shop-Model detached ist, wird es gewissermaßen als “neues” Shop-Objekt erkannt und neu angelegt. Wenn das in diesem Fall die Ursache ist, muss das entsprechende Plugin das Shop-Objekt entweder neu aus dem Repository laden oder die fraglichen Einträge direkt in PlainSQL erzeugen. Besten Gruß, Daniel
Das Problem kann auch mit den saubersten Plugins auftreten, denn an sich liegt der Fehler in Shopware. Plugins können zwar umgebaut werden, diesen Problemfall zu umgehen bzw. nicht auszulösen, da der eigentliche Fehler jedoch in Shopware liegt, sollte er auch dort behoben werden. Sonst werden wir als Community das Problem nie los! @Daniel Nögel: Schaut euch doch nochmal PR169 auf GitHub an.
Hi, mir ist der Fix bekannt, das Problem ist ja grundsätzlich, dass ein Doctrine-Model durch den Stack geschoben wird und Plugin-Entwickler darauf arbeiten (müssen / können). An diesem „Flaw“ ändert der genannte PR auch erstmal nichts. Insofern finde ich es wenig hilfreich, jetzt mit dem Finger auf Shopware zu zeigen: Im konkreten Fall und für alle bestehenden Produktivumgebungen gilt das von mir oben Gesagte - und für die Zukunft wird es sicher eine Lösung geben Daniel P.S.: PullRequest ist natürlich trotzdem cool - dafür also auf jeden Fall danke :thumbup:
Hallo, zunächst mal Danke für die zahlreichen Antworten. Habe mir den PR auf Github und den Fix bzgl. Shop Model und Repository angesehen. Den Core Fix habe ich gleich mal ausprobiert, und folgender Testcase: $em = Shopware()-\>Models(); $shopRepository = $em-\>getRepository('Shopware\Models\Shop\Shop'); $orderRepository = $em-\>getRepository('Shopware\Models\Order\Order'); $orderId = 4; $order = $orderRepository-\>find($orderId); $order-\>setComment('test'); $shop = $shopRepository-\>getActiveById($order-\>getLanguageSubShop()-\>getId()); $em-\>flush($order);
erzeugt nunmehr keine doppelten Einträge. @Daniel: Wie kann ich denn in dem obigen Testcase das Shop-Objekt neu aus dem Repository laden, um mir die Anpassungen an der Shop.php und Repository.php zu sparen? Beste Grüße, MrMDeluxe
Falls jemand hier noch einmal drüber stolpert, hatte das ähnliche Szenario selbst auch schon im Plugin. Dabei wurde bei jeder Versandbestätigung (nach der ersten) die oben genannte Shop-Kopie angelegt. Geholfen hat nach jedem Versand folgendes: Shopware()-\>Models()-\>clear();
Vielleicht braucht die Stelle ja noch einmal wer. Schöne Grüße, Niklas Teich
Hallo Niklas, genau das war es! Mit Shopware()->Models()->clear() funktioniert es dann auch ohne Core Änderungen. Besten Dank, Gruß Markus