我试图搜索此问题,但不知道如何正确地说出来。 所以,我有3张桌子。 '品种','breed_features'和数据透视表'breed_breed_feature' 我正在尝试获得所有选择了breed_features的品种。 我正在从一个数组中将breed_feature id-s传递给控制器。 我的关系设置正确,所以我可以获得所有$ breed->功能 和所有$ feature->品种。
我尝试了什么:
$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,它总是返回空集合。
请帮助。
答案 0 :(得分:0)
好的,我完全没有办法解决这个问题。它有效,但我很确定,必须有更好的方法来做到这一点。
$features = BreedFeature::findMany(request('features'));
$breeds = Breed::with('features')->wherehas('features')->get();
foreach($features as $f)
{
$breeds = $breeds->intersect($f->breeds);
}
因此,我从表单中的ID-s获取数据库中的所有功能。 然后我从数据库中获取所有品种。 然后我将开始与$ feature->品种交叉$品种集合。 会对它进行更多的测试,但现在看起来效果还不错。