Laravel雄辩的查询模型,在n-m关系中正好具有多个关联

时间:2019-06-20 17:41:25

标签: laravel eloquent where-in

我有一个项目,其中有以下模型:

  • 产品
  • FeatureTypes
  • 功能
  • 变量

表和关系如下:

Database Schema Diagram

我有一个请求,我想从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

在此先感谢您的帮助! ;)

1 个答案:

答案 0 :(得分:3)

whereHas()接受带有行数的第四个参数:

$variants = $product
    ->variants()
    ->whereHas('features', function($query) use ($features) {
        $query->whereIn('id', $features);
    }, '=', count($features))
    ->with('features', 'features.featureType')
    ->get();