Laravel子查询

时间:2015-02-11 19:26:47

标签: php laravel eloquent

我如何在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();

1 个答案:

答案 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();