Ich würde gerne Artikel an Hand eines Product-Tags filtern wollen. Dabei soll die Logik sein:
"Zeige alle Produkte, ausser die die einen bestimmten Tag gesetzt haben. "
In SQL dann sowas :
where tags is null or not tags = ‚spezial‘
Aktuell versuche mich für das Setzen eines Criteria mit:
$tagIds = ["7d2ab910259841fea6552efb520daeef"];
$criteria->addFilter(
new NotFilter(NotFilter::CONNECTION_AND,
[new EqualsAnyFilter('product.tagIds', $tagIds)]),
);
Nur leider führt das dann am Ende zum einem leeren Ergebnis. Wenn ich mir das finale SQL anschauen, dann hat es hier so etwas:
where NOT ((JSON_CONTAINS(IFNULL(
product.
tag_ids,
product.parent.
tag_ids), JSON_ARRAY('uuid'))));
Das Problem hier ist, dass damit halt auch alle Sätze rausfallen, bei denen keine Tags gesetzt wurde und dann die Spalte NULL ist.
sprich da müsste dann sowas stehen :
where NOT ((JSON_CONTAINS(COALESCE(
product.
tag_ids,
product.parent.
tag_ids, '[]'), JSON_ARRAY('uuid'))));
also COALESCE(…, ‚‘) …
Die Frage nun, wie bekommt man das dass hier rein gefummelt ?