我有一个项目,其中有以下模型:
表和关系如下:
我有一个请求,我想从Variants
中检索一些特定的Product
的{{1}}。
Features
可以有1个或多个Variant
,但是如果我给一个Features
,并且希望在Variants
上进行更具体的搜索,我希望拥有所有Feature
如果我给了更多Variants
,直到我只有一个Features
,而后者只能有一组特定的Variant
。
这是我现在拥有的代码:
Feature
$variants = $product
->variants()
->whereHas('features', function($query) {
$query->whereIn('id', json_decode(request('features')));
})
->with('features', 'features.featureType')
->get();
包含一个ID为request('features')
的字符串化数组。
我使用了Eloquent的Features
方法,以为它只会给我完全符合请求中所有whereIn
的变体。
但是在再次检查文档时,我发现它将返回在请求中给出至少一个Features
的任何Variants
,这不是我在这里所需要的。
如何进行Eloquent的查询,以仅向我返回与请求提供的所有Feature
相关的Variants
?
在此先感谢您的帮助! ;)
答案 0 :(得分:3)
whereHas()
接受带有行数的第四个参数:
$variants = $product
->variants()
->whereHas('features', function($query) use ($features) {
$query->whereIn('id', $features);
}, '=', count($features))
->with('features', 'features.featureType')
->get();