Laravel groupBy значение и сохранить сумму другого значения со значением groupBy в качестве ключа - PullRequest
0 голосов
/ 28 июня 2018

Извините за длинное название, я просто не знаю, как точно сказать, что я пытаюсь сделать.

Итак, у меня есть таблица таких рейсов.

id | user_id | orig | dest | value    |
=======================================
1  |    1    | LHR  | WLG  | 34000.00 |
2  |    1    | LHR  | WLG  | 47000.00 |
3  |    1    | LHR  | AKL  | 22000.00 |

Я хочу получить массив адресатов ('dest') с суммой значений любой записи с этим адресатом.

В настоящее время я использую Eloquent для извлечения записей, затем groupBy на 'dest'

$transactions =  AirTran::select('orig','dest','value')->where('user_id','1')->get();

$group_tran = $transactions->groupBy('dest');

К сожалению, это возвращает каждую строку отдельно в массиве вместо суммы значения:

WLG:
    0:
       orig: 'LHR'
       dest: 'WLG'
       value: '34000.00'
    1:
       orig: 'LHR'
       dest: 'WLG'
       value: '47000.00'
AKL:
    0:
       orig: 'LHR'
       dest: 'AKL'
       value: '22000.00'

Но то, что я на самом деле хочу, это:

WLG:
    0:
       orig: 'LHR'
       dest: 'WLG'
       value: '81000.00'
AKL:
    0:
       orig: 'LHR'
       dest: 'AKL'
       value: '22000.00'

Есть ли способ получить сумму столбца 'value', используя Eloquent вместо PHP, как я ниже:

foreach($transactions as $transaction) {

   if(isset($data[$transaction->dest]['revenue'])){
       $data[$transaction->dest]['revenue'] += $transaction->value;
    } else {
       $data[$transaction->dest]['revenue'] = $transaction->value;
    }
}

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете использовать функцию суммы элоквантов. Ваш код может быть как:

$ Transactions = AirTran :: select ('orig', 'dest', 'value') -> где ('user_id', '1') -> get ();

$ group_tran = $ Transactions-> groupBy ('dest') -> сумма ( 'значение');

или напрямую одной командой:

$group_tran= AirTran::select('orig','dest','value')->where('user_id','1')
                       ->sum('value')
                       ->groupBy('dest')
                       ->where('user_id','1')
                       ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...