【问题标题】:Laravel tags with and queryLaravel 标签和查询
【发布时间】:2025-11-25 03:20:05
【问题描述】:

我有一个产品过滤器选项。用户在产品类别页面中有不同类型的产品过滤器。

标签

id | tag_name | slug |

产品

id | proudct_name

product_tags

id | product_id | tag_id 

现在我正在尝试检索 tag_name ="ddd" 和 tag_name="ddd" 的所有产品。

这意味着产品应该同时属于这两个类别。

$response=Product::with(['productCategory'])
->when((isset($requestArray)&&count($requestArray)),function ($query)use($requestArray){

            $query->whereHas('productTags', function ($query) use ($requestArray) {

                $query->where(function ($query) use ($requestArray){

                    if (isset($requestArray['filterForm'])&&count($requestArray['filterForm'])){

                        $valueArray=[];
                        foreach ($requestArray['filterForm'] as $key=>$value){


                            if (is_array($value)&&count($value)){


                               $query->whereIn('tags.slug',$value);

                            } elseif($key!="country_list"){

                               $query->where('tags.slug',$value);

                            }


                        }


                    }
                });

            });
        })
            ->whereHas('productCategory',function ($query)use($request,$categoryName){
            $query->where('slug',$categoryName);
        });

当我选择移动品牌和移动颜色的组合时遇到问题/如果我只选择一个过滤器组,那么它可以正常工作

【问题讨论】:

  • 你能发帖$requestArray['filterFrom']吗?
  • @TsaiKoga.updated
  • 如果您过滤您发布的filterForm,它有问题吗?
  • @如果我的过滤器只选择了移动波段和颜色的组合,那么它返回零产品
  • 是的,试试我的代码。

标签: php mysql sql laravel laravel-5


【解决方案1】:

colormobile_brand都在tags.slug

slug 不能同时具有 color 的 value 和 mobile_brand 的 value。

做这样的事情:

// You need to build the combination of mobile_band and color to array:
$slugs = array(['green', 'mi'], ['green', 'lg']);

$response = Product::with(['productCategory'])->where(function($query) use ($slugs) {
    forEach ($slugs as $tags)
    {
        $query->orWhere(function($query) use ($tags) {
            forEach($tags as $tag) 
            {
                $query->whereHas('productTags', function($query) use ($tag){
                     $query->where('tags.slug', $tag);
                });
            }
        });        
    }
});

【讨论】:

  • @since you are using all in where .but it should be where and where similar like that
  • 这里是问另一个问题的 sql 查询。*.com/questions/59691891/myql-pivot-join-fails/…
  • 该查询工作正常,但不确定如何将其转换为 laravel
  • @TsaiKoga.sir 你太棒了。你为我节省了很多时间。如何获得组合的线索
  • @vision 我构建了这些数据和表格,并在本地尝试