【发布时间】:2017-05-16 19:27:14
【问题描述】:
我试图搜索这个问题,但不知道如何正确地用词。 所以,我有3张桌子。 'breeds'、'breed_features' 和数据透视表 'breed_breed_feature' 我正在尝试获取所有选择了breed_features的品种。 我从数组中将breed_feature id-s 传递给控制器。 我的关系设置正确,所以我可以获得所有 $breed->features 和所有 $feature->breeds。
我尝试了什么:
$featureids = request('features');
$breeds = Breed::with('features')->whereHas('features', function($q) use ($featureids)
{
$q->whereIn('breed_feature_id', $featureids);
})->get();
dd($breeds);
结果是所有具有至少 1 个特征 id-s 的品种
$featureids = request('features');
$breeds = Breed::with('features')->whereHas('features', function($q) use ($featureids)
{
$q->where('breed_feature_id', $featureids);
})->get();
dd($breeds);
结果返回具有数组中第一个 id 特征的所有品种,查询甚至不尝试传递其余 id。
$featureids = request('features');
$breeds = Breed::with('features')->whereHas('features', function($q) use ($featureids)
{
foreach ($featureids as $f)
{
$q->where('breed_feature_id', $f);
}
})->get();
dd($breeds);
如果我只传递 1 个 id 来查询,结果返回正确的品种,如果我传递超过 1 个,它总是返回空集合。
请帮忙。
【问题讨论】:
-
选项 3 为空,因为您尝试搜索将
breed_feature_id设置为 1、2、3、4 的品种,例如如果你通过超过 1 个但每个品种只有 1 个breed_feature_id。大约一年前,我遇到了类似的问题,并且能够通过使用whereHas3 次或使用reject来解决它。
标签: laravel laravel-5 eloquent laravel-5.4