在我的问题之前有一点背景:
一个产品有多个标签,比如说 6 个标签,我们想要过滤这 4 个标签中有 2 个存在的产品,但只有那些同时具有这 2 个标签的产品。有没有办法我们可以做到这一点criteria
?一个示例过滤器请求如下所示:
选择所有具有(TAG A 和 TAG B)或(TAG C)的产品
标签-A|标签-B,标签-C
我已经尝试过使用EqualsAnyFilter
,但它选择了OR
它过滤仅具有标签 A 的产品的位置 - 但我希望它是一个AND
过滤器。使用只是EqualsFilter
似乎不会退回任何产品。
$criteria = new Criteria();
$criteria->addAssociation('tags');
$orFilters = [];
$orTags = explode(',', 'TAG-A|TAG-B,TAG-C'); // Based on above scenario
foreach ($orTags as $orTag) {
$andFilters = [];
$andTags = explode('|', $orTag);
// Attempt 1 with EqualsAnyFilter
$andFilters[] = new EqualsAnyFilter('tags.name', $andTags);
// Attempt 2 with EqualsFilter
foreach ($andTags as $andTag) {
$andFilters[] = new EqualsFilter('tags.name', $andTag);
}
if ($andFilters) {
$orFilters[] = new AndFilter($andFilters);
}
}
if ($orFilters) {
$criteria->addFilter(new OrFilter($orFilters));
}
但这不会返回所需的结果。有没有办法过滤这样的产品?欢迎任何建议。谢谢!