2017-07-27 10 views
0

私は、特定の日付、月、文字列などで検索する検索機能を持っています。これまでのところは良いLaravel collection group by

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との関係を介して取得することができます。経費はbelongsToに説明されています。

私のコレクションで作業しているときに達成したいことはすべて可能ですか、その結果に対して別のクエリを実行する必要がありますか?

+2

返されたコレクションではなく、クエリレベルでこれを実行する必要があると思います。後で 'groupBy( '​​description_name')' – Ohgodwhy

+0

のように 'DB :: select( 'SUM(expenses)as total_expenses'、 'SUM(amount)total_amount')'を呼び出すことができます。それは私が推測する最も明白なもののようです:) – Hardist

+1

多分あなたはあなたがコレクションを持っているとき、あなたがすでにアクセスすることができます(groupByの後でも) –

答えて

1

あなたがeager-load descriptionをロードする場合、結果のコレクションをコレクションのネストされたオブジェクトでグループ化できます。 、そして、あなたがそれにアクセスする、記述の名前を使用することができます

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

我々は最初のグループ、およびグループ内の最初の費用が必要と言う:次に

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

グループそれを:だから、あなたは持っていること

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

これは、コレクション内の関連するモデルの名前を取得し、それを使用して質問を解決できることを少し証明しています。