Laravel 5.1 - 通过 id 和 sum 值从数据库组中获取数据

Laravel 5.1 - get data from database group by id and sum values

我不确定该怎么做,我需要从 table 获取数据并将 ID 相同的每个字段的值相加。

我尝试过的事情

$users = User::all();

   $array = [];
    foreach($users as $user)
        {
            array_push($array, [$user->account_id => $user->amount]);
        }

除此之外,我不太确定该怎么做!这是我从数据库中提取的数据。

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

这是我想要的输出

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

这就是我所需要的一切,我觉得它真的很简单,但我不知道,任何帮助和指导将不胜感激,将提供任何需要的进一步信息。

试试这个方法:

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

编辑

由于 ->lists() 现在已在 laravel 5.2+ 中弃用,现在应该是 ->pluck(),仅供参考

如果你想使用 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 和求和查询。

这是一个例子:

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