2016-07-20 93 views
2

我不知道該如何解決這個問題,我需要從表中獲取數據並將每個字段的值相加在一起,其中ID是相同的。Laravel 5.1 - 通過id和總和值從數據庫組獲取數據

事情我已經試過

  • 拉的所有數據,並試圖存儲陣列的複製,然後像

$users = User::all();

$array = []; 
    foreach($users as $user) 
     { 
      array_push($array, [$user->account_id => $user->amount]); 
     } 
  • 使用laravel集合對其進行排序存儲數組dat並通過那裏整理

除了那個我不太清楚怎麼去這個!這裏是我從數據庫中提取的數據。

0: {1: 100.00} 
1: {1: 100.00} 
2: {2: 100.00} 
3: {2: 100.00} 

這是輸出我想

0: {1: 200.00} 
1: {2: 200.00} 

這是所有我需要什麼別的我覺得它很簡單,但我不知道,任何的幫助和指導可以理解的,任何進一步的信息將需要提供。

回答

1

試試這個方法:

<?php 
User::groupBy('account_id') 
    ->selectRaw('sum(amount) as sum, account_id') 
    ->lists('sum','account_id'); 
+0

應力=走了,謝謝你,如果你有時間,你可以迅速解釋「總和(數量)之和,ACCOUNT_ID」?我不是100%確定它有什麼功能,如果你有時間的話,如果沒有生病,只要稍後再看看它們! 再次感謝您的幫助! –

+1

'sum(amount)as sum'將會返回特定'account_id'的總和,就像我們通過'account_id'進行分組一樣。 –

+1

'lists()'將返回'account_id'和'sum'作爲數組。 –

1

如果你想使用PHP組和概括嘗試:

$users = array(
    array(
     "account_id" => 1, 
     "amount" => 100 
    ), 
    array(
     "account_id" => 1, 
     "amount" => 100 
    ), 
    array(
     "account_id" => 2, 
     "amount" => 100 
    ), 
    array(
     "account_id" => 2, 
     "amount" => 100 
    ), 
    array(
     "account_id" => 2, 
     "amount" => 100 
    ), 
    array(
     "account_id" => 2, 
     "amount" => 100 
    ) 
); 
$response = array(); 
foreach ($users as $usersIndex => $usersValue) { 
    if (!isset($response[$usersValue["account_id"]])) { 
     $response[$usersValue["account_id"]][$usersValue["account_id"]] = 0; 
    } 
    $response[$usersValue["account_id"]][$usersValue["account_id"]] += $usersValue["amount"]; 
} 
$response = array_values($response); 
var_dump($response); 

輸出:

array(2) { [0]=> array(1) { [1]=> int(200) } [1]=> array(1) { [2]=> int(400) } } 

但對於操作,您應該使用groupBy和總和查詢。

1

這是一個例子:

$users = DB::table('users') 
       ->select('id', DB::raw('SUM(amount) as total_amount')) 
       ->groupBy('id') 
       ->get();