Красноречивый - получить сумму столбца отношения

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

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.

Вам нужно выполнить запрос: ])->get();

Jonas Staudenmeir 18.06.2019 18:25

ой ну спасибо. теперь он возвращает нулевые элементы

anderlaini 18.06.2019 18:30

Я немного в замешательстве! почему вы используете их, так как есть более простой способ! как отношение!

hasan05 18.06.2019 18:32

Как ты звонишь getStockItemsTotalCost()?

Jonas Staudenmeir 18.06.2019 18:32

Есть ли связь в том, что каждый сток имеет одну отгрузку?

hasan05 18.06.2019 18:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
5
457
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решено с помощью:

    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;
    }

Будет приятно, если вы проголосуете за комментарий, который помог вам, и/или отметите свой вопрос как решенный.

Peyman 18.06.2019 19:46

Другие вопросы по теме