orm – 雄辩的关系过滤

是否可以通过相关模型过滤Laravel的Eloquent ORM中的结果集?我知道Eloquent没有加入表格,但我想要的结果类似于:

SELECT *
FROM tickets
JOIN statuses on tickets.status_id = statuses.id
WHERE statuses.name != ‘Closed’;

我在Eloquent找到的最接近的功能是:

$tickets = Ticket::with(array('status' => function($q) {
    return $q->where('name', '!=', 'Closed');
}))->get();

如果名称未关闭,这仍将返回所有票证,但仅返回状态关系.

另外,我知道这可以在Fluent中完成,但我想使用Eloquent提供的返回的嵌套对象结构:

echo ticket->status->name;

Fluent返回展平结果作为联接查询.

最佳答案
看起来这个问题已经过时了,但如果你在这里看到一个真正的答案,我们应该尽量避免过多地查询数据库,接受的答案是两次,但你可以通过一次拍摄来完成这个

$tickets = Ticket::with('status')->whereHas('status', function($q) {
    return $q->where('name', '!=', 'Closed');
})->get();

转载注明原文:orm – 雄辩的关系过滤 - 代码日志