我正在尝试对产品和3个相关表进行搜索查询这是我迄今为止所做的:
$products = Product::with(['categories', 'tags','stags'])
->when(request('search'), function($query) {
return $query->where('title','like','%' . request('search') . '%');
})
->when(request('category_id'), function ($query) {
return $query->whereHas('categories', function ($q) {
return $q->where('id', request('category_id'));
});
})
->orderBy('place' , 'desc')
->paginate(12);
问题是,当我为stag和tag添加查询时:
$products = Product::with(['categories', 'tags','stags'])
->when(request('search'), function($query) {
return $query->whereHas('tags', function ($q) {
return $q->where('name', request('search'));
})->orWhereHas('stags', function ($q) {
return $q->where('name', request('search'));
})->orWhere('title','like','%' . request('search') . '%');
})
->when(request('category_id'), function ($query) {
return $query->whereHas('categories', function ($q) {
return $q->where('id', request('category_id'));
});
})
->orderBy('place' , 'desc')
->paginate(12);
Laravel忽略了我的category_id查询!
我认为当第一个查询返回
true
时,那么它就不会转到第二个category_id
,当查询雄辩的时候你的标签,stags
查询结果。这就是为什么您只看到'tags','stags'
查询结果而不是category_id
结果。
它类似于if-else结构:如果返回true结果,则else将不会执行
当文档:when()时阅读此文档