Laravel Eloquent 查询模型在 n 对 m 关系中恰好有多个关联

Laravel Eloquent query model which has exactly a number of association in a n-to-m relationship

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

表和关系如下:

我有一个请求,我想从 Product 中检索具有特定 FeaturesVariants。 一个 Variant 可以有 1 个或多个 Features,但如果我给一个 Feature,我想拥有所有 Variants,并在 Variants 上进行更具体的搜索如果我给更多Features,直到我只有一个Variant,它只能有一组特定的Feature

这是我目前拥有的代码:

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

request('features') 包含一个 id 为 Features 的字符串化数组。

我使用了 Eloquent 的 whereIn 方法,认为它只会给我完全具有请求中给出的所有 Features 的变体。

但是在再次检查文档时,我发现它会 return 任何 Variants 至少有一个 Feature 在请求中给出,这不是我在这里需要的。

我怎样才能使 Eloquent 对 return 我的查询只有与请求给出的所有 Features 关联的 Variants

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

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

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