Сумма в Laravel Eloquent и возврат на страницу - PullRequest
2 голосов
/ 22 апреля 2019

Я пытаюсь получить инвентарную стоимость местоположения с помощью следующего красноречивого запроса. Он правильно обрабатывает все (имя местоположения, адрес, количество пользователей и т. Д.), За исключением значения инвентаря, которое возвращает ноль. Сначала я построил этот запрос в SQL, который прекрасно работает, но по какой-то причине не работает красноречиво. Это был точно такой же запрос.

$locations = \App\Models\Location::select(DB::raw('locations.*', 'SUM(inventory.part_price * inventory.quantity) AS inventory_value'))
            ->leftJoin('inventory', 'locations.id', '=', 'inventory.location_id')
            ->where('locations.company_id', '=', Auth::user()->company_id)
            ->groupBy('locations.id')
            ->get();

В блейд-файле я использую цикл @foreach. Я пытаюсь использовать {{$location->inventory_value}}, который возвращает ноль. Я пытался сбросить эту конкретную переменную в контроллере, и там тоже ничего. Файл лезвия выглядит следующим образом:

enter image description here

Он должен возвращать инвентарную стоимость всего следующего:

enter image description here

В конечном счете, мой вопрос заключается в том, как мне исправить этот запрос, чтобы получить сумму инвентарной цены и количества для отображения в блейд-файле? Спасибо!

1 Ответ

4 голосов
/ 22 апреля 2019

При использовании DB::raw передайте все столбцы в качестве первого параметра (в пределах одной и той же цитаты), например:

DB::raw('locations.*, SUM(inventory.part_price * inventory.quantity) AS inventory_value')

Вы также можете использовать selectRaw, чтобы он выглядел чище, как:

use App\Models\Location;

$locations = Location::selectRaw('locations.*, SUM(inventory.part_price * inventory.quantity) AS inventory_value')->leftJoin...
...