Filtern von Produkten per Property Option Id?

Hallo zusammen!

Ich bin jetzt seit 2 Tagen am raetseln, wie ich es schaffe Produkte anhand einer oder mehreren property_group_options.id zu filtern.

Aktuell habe ich folgende Criteria aufgebaut:

$criteria = new Criteria();

$criteria->addAssociation('options')
    ->addFilter(new EqualsAnyFilter('options.id', ['valid-id']));

/** @var EntityRepository $productRepository */
/** @var Context $context */
$result = $productRepository->search($criteria, $context)->getTotal();

// $result ist immer 0, sollte aber 1 sein

Ich konnte verifizieren, dass die connection zwischen einem product und der property_group_option, die ich suche, in der DB vorhanden ist (in der product_property Tabelle).

Ich habe es auch schon mit dem EqualsFilter::class und dann nur einer id probiert, mit demselben Ergebnis.

Scheinbar verstehe ich noch nicht ganz, wie der DAL funktioniert, bzw die Criteria.

Kann mir da wer sagen, was ich falsch mache?

Vielen Dank schonmal im Vorraus!

Nevermind. Habe die Loesung gerade gefunden :man_facepalming:

Wenn man anstatt der ‚options‘ association direkt ueber das ‚propertyIds‘ FkField::class filtert, funktioniert es.

$criteria = new Criteria();

$criteria->addFilter(new EqualsAnyFilter('propertyIds', ['valid-id']));

/** @var EntityRepository $productRepository */
/** @var Context $context */
$result = $productRepository->search($criteria, $context)->getTotal();

// $result ist bei mir 1, was mit den Daten uebereinstimmt
1 Like

Das funktioniert bei mir irgendwie nicht.
Ich hab genau das gleiche versucht auf einem Custom Endpoint innerhalb eines Controllers. sobald ich

$criteria->addFilter(new EqualsAnyFilter('propertyIds', ['irgendeine-gültige-id']));

hinzufüge meldet der Server einen 500er Fehler. Sonst nichts, Serverlogs zeigen auch nur an, dass der Enpoint gefunden wurde. Ich verwende EntityRepository und Context, habe es aber auch mit SalesChannelRespoitory versucht und SalesChannelContext. Gibt es dazu noch Ideen?