2013-06-23 160 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();