2013-06-23 132 views
2

是否可以通过相关模型过滤Laravel雄辩ORM中的结果集?据我所知,雄辩不加入表,但我想结果会类似于:雄辩关系过滤

SELECT * FROM 上tickets.status_id = statuses.id WHERE statuses.name JOIN状态门票=“关闭“;

我在口才发现的最接近的功能是:

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

这仍然将返回所有的票,但只有状态关系的,如果名字不会被关闭。

而且,我知道这可以流利地做,但我想与嵌套对象的返回结构雄辩提供工作:

echo ticket->status->name; 

流利返回一个扁平的结果会连接查询。

回答

1

我觉得我试图让它太复杂。

$statuses = Status::where('name', '!=', 'Closed')->list('id'); 
$tickets = Ticket::with('status')->whereIn('status_id', $statuses)->get(); 

或者,我可以去,我真的不想做状态的方向...但它会降低我的查询次数:

$statusTickets = Status::with('ticket')->where('name', '!=', 'Closed')->get(); 
0

您可能可以在模型中定义hasOne('status')关系并使用该关系,但我没有亲自尝试这么做。

+0

该票属于一个状态,因为票有一个status_id。状态有很多票。 – dhudson

2

看来这个问题是旧的,但万一如果你是在这里寻找一个真正的答案是,我们应该尽力避免查询数据库太多,公认的答案做它两次,但你可以通过这样一个镜头来完成这项工作

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