是否可以通过相关模型过滤Laravel的Eloquent ORM中的结果集?我知道Eloquent没有加入表格,但我想要的结果类似于:
SELECT * FROM ticket在ticket.status_id = statuses.id上的JOIN状态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返回展平结果作为联接查询 .
5 回答
看起来这个问题已经过时了,但是如果你在这里看到一个真正的答案,我们应该尽量避免过多地查询数据库,接受的答案是两次,但你可以通过一次拍摄来完成这个
我觉得我试图让它变得太复杂 .
或者,我可以去Statuses的方向...我不是真的想做,但它会减少我的查询次数:
您可以在模型中覆盖newQuery,以便将其他查询应用于所有get()方法 - 请参阅http://usman.it/filter-eloquent-results-overriding-laravel/
您可以在模型中定义一个hasOne('status')关系并使用它,但我没有亲自尝试过这样做 .
尝试将查询范围添加到模型关系中 . Laravel. Use scope() in models with relation
Laravel 4.2