eloquent - получить сумму столбца отношений - PullRequest
0 голосов
/ 18 июня 2019

Мои модели структурированы таким образом:

Stock (hasMany) StockItem
StockItem (belongsTo) Shipment
Shipment (hasMany) StockItem
 - item_cost = double

Итак, я пытаюсь получить все предметы и сумму их total_cost (находится в модели отгрузки).

    public function getStockItemsTotalCost($stockItemId=null){
      $q = $this->stockItems()->where('id','=',$stockItemId)->with('shipment')->withCount([
        'shipment AS cost_total' => function ($query) {
          $query->select(DB::raw("SUM(item_cost) AS cost_total"));
        }
      ]);
      print_r($q);exit;
    }

Это возвращает Allowed memory size of 268435456 bytes exhausted ошибку.

Это лучший способ сделать этот запрос?


Я получил небольшой прогресс

    public function getStockItemSumCost($stockItemId){
      $q = $this->stockItems()->whereHas('stockPart', function($q) use ($stockItemId) {
        return $q->where('id', '=', $stockItemId);
      })->with('shipment')
      ->get();

      print_r($q->toArray());exit;
    }

Это возвращает список StockItem с отгрузкой внутри каждого ... Мне нужен один столбец с SUM () для всех столбцов Shipment.item_cost.

1 Ответ

0 голосов
/ 18 июня 2019

Решено с:

    public function getStockItemSumCost($stockItemId){
      $q = $this->stockItems()
      ->whereHas('stockPart', function($q) use ($stockItemId) { return $q->where('id', '=', $stockItemId); })
      ->join('shipments', 'stock_items.shipment_id', '=', 'shipments.id')
      ->sum('item_cost');

      return $q;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...