在我的問題之前的一些背景:
一個產品有多個標簽,比如說 6 個標簽,我們想要過濾存在這 4 個標簽中的 2 個的產品,但只過濾那些同時具有這 2 個標簽的產品。有沒有辦法使用criteria? 示例過濾器請求如下所示:
選擇所有具有(TAG A 和 TAG B)或(TAG C)的產品
標簽-A|標簽-B,標簽-C
我已經嘗試過使用EqualsAnyFilter但它選擇像OR過濾只有標簽 A 的產品一樣- 但我希望它是一個AND過濾器。使用 justEqualsFilter似乎不會回傳任何產品。
$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));
}
但這不會回傳所需的結果。有沒有辦法過濾這樣的產品?歡迎任何建議。謝謝!
uj5u.com熱心網友回復:
我可以通過使用ContainsFilter代替來計算如下:
foreach ($andTags as $andTag) {
$andFilters[] = new ContainsFilter('tagIds', $andTag);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/368822.html
