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 

这只是一个小的证明,你可以得到集合中的相关模型的名称,并用它来解决你的问题。