无法在 Shopware 6 中按多个标签过滤产品

Posted

技术标签:

【中文标题】无法在 Shopware 6 中按多个标签过滤产品【英文标题】:Cannot filter products by multiple tags in Shopware 6 【发布时间】:2022-01-04 09:31:08 【问题描述】:

我的问题之前的一点背景:

一个产品有多个标签,比如说 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));
        

但这不会返回所需的结果。有没有办法过滤这样的产品?欢迎任何建议。谢谢!

【问题讨论】:

【参考方案1】:

我可以通过使用ContainsFilter 来解决如下问题:

    foreach ($andTags as $andTag) 
        $andFilters[] = new ContainsFilter('tagIds', $andTag);
    

【讨论】:

以上是关于无法在 Shopware 6 中按多个标签过滤产品的主要内容,如果未能解决你的问题,请参考以下文章

Shopware 6 具有自定义字段类型的产品

在Javascript中按多个条件过滤数组

如何在prometheus中按两个标签过滤?

如何在 Shopware 6 中为订单添加自定义字段?

如何在 Shopware 6 中导入期间替换(不添加)属性?

无法通过 Shopware 6 中的 XmlHttpRequest 请求 PageController