#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();