我如何在Laravel中执行此查询?我想我纠结了。
select * from `entries`
where (`id` = (
select entry_id FROM `elements` where `content` = 'David'
));
我有一个Entry模型和一个Element模型,并且渴望加载工作正常(例如,如果我改为$entries = Entry::with('elements');
它的效果很好)。
我想抓住元素相关元素具有特定值的条目。
我的尝试抓取所有条目,但只查看查询适合的元素:
$entries = Entry::with(['elements' => function($q) use ($find){
$q->where('content', '=', $find);
}])->get();
答案 0 :(得分:2)
要按相关模型过滤,您可以使用has()
。在这种情况下,因为您有条件要申请whereHas
:
$entries = Entry::with(['elements' => function($q) use ($find){
$q->where('content', '=', $find);
}])
->whereHas('elements', function($q) use ($find){
$q->where('content', '=', $find);
})->get();
现在只需要加载与谓词匹配的相关模型,并确保只返回至少有一个相关模型的条目。
要减少重复代码,您还可以将闭包放在变量中:
$filter = function($q) use ($find){
$q->where('content', '=', $find);
};
$entries = Entry::with(['elements' => $filter])->whereHas('elements', $filter)->get();