[gelöst] Ältere Version einer Bestellung (Order) abfragen

Hallo zusammen,

bei der Erstellung eines Dokuments im DocumentService wird ja neben der Referenz auf die Order (order_id) auch die Order-Version (order_version_id) gespeichert, siehe https://github.com/shopware/core/blob/master/Checkout/Document/DocumentService.php#L141. Hintergrund ist der Umstand, dass Bestellungen nachbearbeitet werden können und weitere Dokumente (z.B. Gutschriften) erzeugt werden können. An sich ein guter Ansatz.

Wie kann man aber nun die konkrete Order-Version abfragen?

Über die Abfrage des DocumentRepository mit entsprechender Assoziation zur Order bzw. mit direkter Abfrage des OrderRepository bekommt man immer nur die aktuellste Version, z. B.:

 $criteria = new Criteria(); $criteria-\>addFilter( new MultiFilter(MultiFilter::_CONNECTION\_AND_, [new EqualsFilter('id', $document-\>getOrderId() ), new EqualsFilter('versionId', $document-\>getOrderVersionId() )]) );

 $orderVersions = $orderRepository-\>search($criteria, $context);

Gibt es eine Möglichkeit, die Vorgänger einer Entity abzufragen bzw. über das EntityRepository zu laden?

 

 

 

Ich antworte mir mal selber, da es eine indirekte Möglichkeit über das Version-Repository gibt. Anhand der Version-ID kann man sich über die Version zum Commit mit dem Commit Data und dem Payload hangeln. Im Payload stehen dann die Versions-Datei.

Schöner wäre freilich das Laden einer Version über das konkrete Entity Repository oder den Version Manager. Vielleicht hat hier noch jemand einen Hinweis.

Hallo @tawaritsch2‍

der Context hat eine Methode mit der du ein neues Context Objekt erstellen kannst, das dann eine bestimmte Version enthält: \Shopware\Core\Framework\Context::createWithVersionId
Wenn du dort deine $versionId reinreichst und das resultierende Context-Objekt in das Repo reichst, solltest du die versionierten Daten erhalten.

Viele Grüße aus Schöppingen

cool Michael Telgmann

Hervorragend, danke Michael!

Ich hatte schon den Context vermutet, wollte aber per Setter die VersionId bestimmen, was nicht geht. Volltextsuche über die Methodennamen beim nächsten mal…
PS: Diese tolle Funktion sollte unbedingt in die Dev Docs!

Da hast du wohl recht  Smile 
Wenn du magst, kannst du gerne einen PR dafür erstellen https://github.com/shopware/platform/tree/master/src/Docs/Resources/current

Viele Grüße aus Schöppingen

cool Michael Telgmann