Orders nach transaction - und delivery - state filtern über DAL

Hallo Leute,

ich hoffe mir kann jemand helfen ich stehe gerade etwas auf dem Schlauch.

Ich möchte über den DAL von Shopware 6 Bestellungen aus dem Order Repository abrufen und dabei nach dem Bestellstatus und dem Lieferstatus Filtern.

Ich habe also folgendes gebaut:

 $criteria = new Criteria(); $criteria-\>addFilter( new EqualsFilter('currency\_factor', 1) ); $criteria-\>addAssociation('deliveries'); $criteria-\>addAssociation('transactions');

 $orders = $this-\>orderRepository-\>search( $criteria, Context::createDefaultContext() );

Über die Filter kann ich aber anscheinend nur die Felder der entsprechenden Tabelle Filtern und nicht die Associations. (Siehe Beispiel mit currency_factor)

Ich müüste aber die ID`s des stateMachineState - Entity filtern, welche in deliveries und transactions vorkommen um Bezahl und Lieferstatus zu prüfen.

Das ganze wird in einem Console-Command ausgeführt, weshalb ich das über den DAL machen wollte und nicht über die API. Über die API würde ich, wenn ich das

richtig gesehen habe die entsprechenden Status direkt im JSON zurück bekommen.

Weiß jemand wie man die Associations filtern kann oder bin ich auf dem Holzweg und das funktioniert komplett anders ?

Danke schonmal :slight_smile:

Hallo @webjohn‍,

du kannst einfach im EqualsFilter die Associations voranstellen und kannst dann jedes Feld der Assoziations-Entity auswählen:

$criteria = new Criteria();
$criteria->addFilter(
    new EqualsFilter('currency_factor', 1)
);
$criteria->addAssociation('deliveries');
$criteria->addAssociation('transactions');
$criteria->addFilter(new EqualsFilter('transactions.stateId', $orderTransactionStateId));
$orders = $this->orderRepository->search(
    $criteria,
    Context::createDefaultContext()
);

Dies lässt sich beliebig tief verschachteln

Viele Grüße aus Schöppingen

cool Michael Telgmann