Shopware\Models\Order\Order setOrderStatus() ändert den Status nicht wie gewünscht

$orderStatus = 7; // normally not set hard from here
$orderID = 01234; // normally there is a real id involved

​$orderStatusRepository = Shopware()->Models()->getRepository('Shopware\Models\Order\Status');
$orderStatusRepositoryObject = $orderStatusRepository->findOneBy(['id' => $orderStatus]);

$orderOrderRepository = Shopware()->Models()->getRepository('Shopware\Models\Order\Order');
$orderOrderRepositoryObject = $orderDocumentEntity->findOneBy(['id' => $orderID]);

$orderOrderRepositoryObject->updateChangedTimestamp();
$orderOrderRepositoryObject->setOrderStatus($orderStatusRepositoryObject);

Dies ist mein nicht funktionierender Code. Ich habe einen Shop, bei dem diese Änderung nicht funktioniert. Ich habe 3 Shops bei denen diese Änderung funktioniert.

Woran kann es liegen, wenn dies nicht funktioniert? Die übergebenen Werte sind korrekt. Es werden Einträge sowohl für $orderStatusRepositoryObject als auch für $orderOrderRepositoryObject gefunden. Aber die gewünschte Änderung findet nicht statt. Der Status wird nicht aktualisiert.

Du musst den Wert noch persistieren und speichern:

Shopware()->Models()->persist($orderOrderRepositoryObject);

Shopware()->Models()->flush();

1 Like

Vielen Dank erstmal für die Antwort. Dies führt leider auch nicht zum gewünschten Erfolg. Flushed wurde bereits auch vorher schon. Wie bereits geschrieben, habe ich mehrere Testsysteme am laufen, wo es funktioniert.

Wie kann ich hier beim Debuggen am besten ansetzen um den Fehler zu finden?

Geht das nicht einfacher über die sOrder Klasse (\engine\Shopware\Core\sOrder.php) und die dortige Funktion setOrderStatus()?

Hallo,
Ich arbeite mit bdgraue zusammen und wir versuchen dieses Problem zu lösen.
Wir konnten sOrder-> changeOrderStatus () nicht verwenden, da diese Funktion einfaches SQL verwendet (Referenz: https://forum.shopware.com/discussion/comment/255601#Comment_255601) und wir das Doctrine-Event abonnieren.

Das Problem ist, dass es nicht nur auf der Website des Kunden funktioniert, sondern auch an allen anderen Orten, an denen wir es getestet haben. Was könnte der Grund sein? Ein Plugin-Cache?

wir haben das Problem gefunden. Es lag nicht an unserem Plugin, sondern an einem anderen Plugin, welches wohl auch eine Statusänderung abfängt und an der Stelle dann einen Fehler wirft. Den Fehler melde ich umgehend dem Hersteller des anderen Plugins und hoffe, dass er das get() on null abfängt :slight_smile: