John Davidson

php - Cannot filter products by multiple tags in Shopware 6


A little background before my question:

A product has multiple tags lets say 6 tags, and we want to filter products where 2 out of those 4 tags are present, but only those product that have BOTH these 2 tags there. Is there a way we can do that using criteria ? An example filter request would be like such:

Select all products that have (TAG A and TAG B) OR (TAG C)


I already tried using EqualsAnyFilter but that selects like an OR where it filters products that have Tag A only - but I want it to be an AND filter. Using just EqualsFilter does not seem to be returning any products.

        $criteria = new Criteria();

$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('', $andTags);

// Attempt 2 with EqualsFilter
foreach ($andTags as $andTag) {
$andFilters[] = new EqualsFilter('', $andTag);

if ($andFilters) {
$orFilters[] = new AndFilter($andFilters);

if ($orFilters) {
$criteria->addFilter(new OrFilter($orFilters));

But this does not return the desired result. Is there a way to filter products like this? Any suggestions are welcome. Thanks!

My Answer:
>addFilter(new EqualsAnyFilter('tags', ['TAG-A', 'TAG-B']));_ $criteria->addFilter(new EqualsAnyFilter('tags', ['TAG-C']));

Rate this post

3 of 5 based on 8420 votes


© 2024 - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us