Laravel 子查询
Laravel Subquery
如何在 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();
要按相关模型进行过滤,您可以使用 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();
如何在 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();
要按相关模型进行过滤,您可以使用 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();