Мои модели структурированы следующим образом:
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.
ой ну спасибо. теперь он возвращает нулевые элементы
Я немного в замешательстве! почему вы используете их, так как есть более простой способ! как отношение!
Как ты звонишь getStockItemsTotalCost()?
Есть ли связь в том, что каждый сток имеет одну отгрузку?






Решено с помощью:
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;
}
Будет приятно, если вы проголосуете за комментарий, который помог вам, и/или отметите свой вопрос как решенный.
Вам нужно выполнить запрос:
])->get();