Как получить сумму столбцов из группы записей в объединении? - PullRequest
3 голосов
/ 08 января 2020

У меня есть запрос, который возвращает мне документы. Я хотел бы объединить суммы товаров каждого документа и суммировать их.

Это выглядит так:

Есть документы.

  +-------------+----------+
  | document_id | owner_id | 
  +-------------+----------+
  | 52f20e4d    | ef27737d |  
  | 3bfdc5aa    | ef27737d |   
  +-------------+----------+

Продукты прилагаются к каждый документ.

  +-------------+-------------+-----------+
  | product_id  | document_id | total_sum |
  +-------------+-------------+-----------+
  | b60624a7    | 52f20e4d    | 10        |
  | fcc21801    | 52f20e4d    | 5         |
  | d5cbe99d    | 3bfdc5aa    | 3         |
  | 5e537533    | 3bfdc5aa    | 4         |
  +-------------+-------------+-----------+

Мой php код:

$result = DB::table('documents as docs')->leftJoin('products as t_products', function($join) {
    $join->on('t_products.document_id', '=', 'docs.document_id');
})->where('docs.owner_id', '=', $currentUserId)->select('docs.document_id', 't_products.total_sum')
    ->get();

return response()->json($result);

Я получаю следующее:

[
  {
      "document_id": "52f20e4d",
      "total_sum": "5"
  },

  {
      "document_id": "52f20e4d",
      "total_sum": "10"
  },

  {
      "document_id": "3bfdc5aa",
      "total_sum": "4"
  },

  {
      "document_id": "3bfdc5aa",
      "total_sum": "3"
  }
]

Но я хотел бы видеть только две записи в котором общая_сумма будет суммироваться.

Вот так:

[
    {
        "document_id": "52f20e4d",
        "total_sum": "15"
    },

    {
        "document_id": "3bfdc5aa",
        "total_sum": "7"
    }
]

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Добавить группу по идентификатору документа и общей сумме

$result = DB::table('documents as docs')
    ->leftJoin('products as t_products', function($join) {
        $join->on('t_products.document_id', '=', 'docs.document_id');
    })
    ->where('docs.owner_id', '=', $currentUserId)
    ->selectRaw('docs.document_id, sum(t_products.total_sum) as total_sum')
    ->groupBy('docs.document_id')
    ->get();
0 голосов
/ 08 января 2020

Попробуйте это

$result = DB::table('documents')
    ->Join('products','products.document_id', '=', 'documents.document_id')
    ->where('documents.owner_id',$currentUserId)
    ->selectRaw('documents.document_id, sum(products.total_sum) as total_sum')
    ->groupBy('documents.document_id')
    ->get();
...