2015-05-20 66 views
0

我的目標是檢索所有用戶的「項目」,然後在我的視圖中按其「狀態」進行分組。有4種可能的狀態,每個狀態都有自己的<div>在頁面上包含項目的信息。如何在Eloquent ORM中使用groupBy()來對一個集合進行分組

$items = Item::ownedBy(Auth::id())->groupBy('status')->get(); 

這似乎做某種分組的,但是當我遍歷集合,我得到的4個結果,一個是最大:一些閒逛我相信我需要使用groupBy()方法,像這樣經過每個狀態。這並不能真正解決我的問題,因爲我需要爲每個狀態顯示所有用戶的項目,而不僅僅是一個。我必須在這裏錯過一些東西,我真的很想避免對每個狀態進行查詢並以這種方式顯示它們。我想我可以按地位過濾集合並創建4個新集合,但這不是groupBy()應該做什麼?

+0

SQL'GROUP BY status'將具有相同'status'的所有行聚合成一行,所以它不是你想要的。 – ceejayoz

+0

謝謝@ceejayoz我有一種感覺,我可能會在那裏走錯路。過濾到4個不同的集合/數組是否是最好的做法呢? –

回答

1

您可以使用laravel和Collections輕鬆完成。集合具有強大的API和許多方便的方法,可以輕鬆實現您想要的。

這裏的錯誤在於你在QueryBuilder對象上調用groupBy,它只返回來自數據庫記錄的分組。相反,您必須選擇所有需要的記錄,然後它們將作爲集合返回。之後,您可以根據需要操作集合。所以,你需要的是:

$items = Item::ownedBy(Auth::id())->get()->groupBy('status'); 

您可以查看所有的總彙類有用的方法here的。

+0

謝謝,這是有道理的。那麼我將如何顯示分組數據?我找不到有關如何使用groupBy分組和顯示數據組的任何文檔。 –

+0

@JoshMountain您可以結帳[類參考](http://laravel.com/api/master/Illuminate/Database/Eloquent/Collection.html#method_groupBy)。 groupBy返回一個集合對象,然後你可以像數組一樣循環它。您可以var_dump集合來查看結構。 – shaddy

相關問題