2017-07-27 70 views
0

我有一個搜索功能,以搜索特定日期,月份,字符串,任何費用。它返回一個集合:Laravel收集組由

enter image description here

到目前爲止好。我可以顯示所有返回的Expenses。現在,我想要做的是顯示一個總費用計數和總金額,按description_id分組。如果我只是做$result->groupBy('description_id),我只是得到一組集合,從中我可以顯示總數和總金額,但不顯示描述的名稱。我想要的東西例如:

Grouped Results (By Expense): 

Description Name: <-- Issue displaying this 
Total Expenses: 3 
Total Amount: 53444 

描述名稱只能通過ExpenseDescription之間的關係獲得。費用屬於一個描述。

當我的收藏工作時,是否有可能實現我想要的,還是應該對這些結果執行單獨的查詢? (不受歡迎的)

+2

我想你應該在查詢級別執行此操作,而不是在返回的集合上。你可以簡單地調用'DB :: select('SUM(費用)'作爲total_expenses','SUM(amount)'作爲total_amount')'然後'groupBy('description_name')' – Ohgodwhy

+0

我會給這個這似乎是最明顯的事情,我猜:) – Hardist

+1

也許你可以只是急於加載描述,以便當你有收集,你有一個嵌套的對象/描述數組已經可以訪問(即使在groupBy之後) –

回答

1

如果您急於加載description,那麼您可以將結果集合按集合的嵌套對象分組。所以,你可能有:

$expenses = Expenses::with('description')->get(); //collection 

然後組它:

$grouped = $expenses->groupBy('description.name'); 
//or 
$grouped = $expenses->groupBy('description_id'); 

然後你可以使用的描述,說,我們需要在第一組,名字,訪問它和第一犧牲組中,

$description_name = $grouped 
        ->first() //the first group 
        ->first() //the first expense in group 
        ->description //the description object 
        ->name //the name 

這只是一個小的證明,你可以得到集合中的相關模型的名稱,並用它來解決你的問題。