Нельзя использовать элемент selectRaw в предложении where

#laravel

Вопрос:

Пытаюсь использовать предложение where для объекта «selectRaw», который я определил с помощью «как».

Но это не работает.

 $rafbul = Inventory::selectRaw('*, sum(quantity) as quantity_sum')  -gt;join('shelves', function($q){  $q-gt;on('shelves.id', 'inventories.shelf_id');  $q-gt;where('type', '!=', 'stock');  })  -gt;where('product_id', $product_id)  -gt;where('quantity', 'gt;', 0)  -gt;groupBy('shelf_id')  -gt;orderBy('inventories.created_at')  -gt;first();    

Он возвращается;

 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'quantity_sum' in 'where clause' (SQL: select *, sum(quantity) as quantity_sum from `inventories` inner join `shelves` on `shelves`.`id` = `inventories`.`shelf_id` and `type` != stock where `product_id` = 6188 and `quantity_sum` gt; 0 group by `shelf_id` order by `inventories`.`created_at` asc limit 1)  

Что не так с этой логикой?

Комментарии:

1. Вероятно, вам нужно использовать это HAVING предложение, если вы хотите включать только элементы выше определенного SUM(column) , так как оно агрегировано.

2. Я не вижу quantity_sum в предложении where. Является ли эта ошибка результатом именно этого запроса?

Ответ №1:

Для фильтрации по агрегированному столбцу having()/havingRaw() следует использовать следующие методы

 $rafbul = Inventory::selectRaw('*, sum(quantity) as quantity_sum')  -gt;join('shelves', function($q){  $q-gt;on('shelves.id', 'inventories.shelf_id');  $q-gt;where('type', '!=', 'stock');  })  -gt;where('product_id', $product_id)  -gt;groupBy('shelf_id')  -gt;havingRaw('sum(quantity) gt; ?', [0])  -gt;orderBy('inventories.created_at')  -gt;first();