我尝试从数据库中获取所有产品,并基于request parameters
进行过滤
所以我创建了一些Models
,例如Product
,Property
,Attribute
。并在many to many
和Product and Property
之间创建Product and Attribute
关系。
这是我查询的一部分:
$products = Product::where('status', 'accept')
->when(request('properties'), function ($query) {
return $query->whereIn('id', request('properties'));
})
->when(request('attributes'), function ($query) {
return $query->whereIn('id', request('attributes'));
})->get();
所以这里没有错误,但是我想在这里更改的是属性过滤的想法。
我想将whereIn
过滤更改为whereExact
过滤。多数民众赞成在我将request('attributes')
的值按[1,2]
发送到此查询的地方,我希望结果应该是:
所有具有id = 1属性并具有id = 2属性的产品
答案 0 :(得分:0)
尝试将foreach
与whereHas()
一起使用:
$products = Product::where('status', 'accept')
->when(request('properties'), function ($query) {
foreach(request('properties') as $id){
$query->whereHas('properties', function($query) use ($id){
$query->where('id', $id);
});
}
})
->when(request('attributes'), function ($query) {
foreach(request('attributes') as $id){
$query->whereHas('attributes', function($query) use ($id){
$query->where('id', $id);
});
}
})->get();
whereHas()
的第一个参数应为关系的方法名称。