Laravel Eloquent 查询模型在 n 对 m 关系中恰好有多个关联
Laravel Eloquent query model which has exactly a number of association in a n-to-m relationship
我有一个项目,其中有以下模型:
- 产品
- 特征类型
- 特点
- 变体
表和关系如下:
我有一个请求,我想从 Product
中检索具有特定 Features
的 Variants
。
一个 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();
我有一个项目,其中有以下模型:
- 产品
- 特征类型
- 特点
- 变体
表和关系如下:
我有一个请求,我想从 Product
中检索具有特定 Features
的 Variants
。
一个 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();