РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
284 of 1392 menu

Метод havingRaw

Метод havingRaw применяется к запросу Query Builder и позволяет добавить сырое условие в секцию HAVING запроса. Это бывает полезно, когда стандартных методов having недостаточно для построения сложных условий агрегации. В качестве параметра метод принимает строку с SQL-выражением и массив привязок для безопасной подстановки значений.

Синтаксис

<?php DB::table($table)->havingRaw($sql, $bindings = []); ?>

Пример

Давайте найдём категории, у которых средняя цена товаров больше 100:

<?php use Illuminate\Support\Facades\DB; $res = DB::table('products') ->select('category_id', DB::raw('AVG(price) as avg_price')) ->groupBy('category_id') ->havingRaw('AVG(price) > ?', [100]) ->get(); foreach ($res as $row) { echo $row->category_id . ' - ' . $row->avg_price; } ?>

Результат выполнения кода:

"1 - 150.5" "3 - 200.75"

Пример

Теперь найдём категории, у которых количество товаров больше 5 и средняя цена меньше 500:

<?php use Illuminate\Support\Facades\DB; $res = DB::table('products') ->select('category_id', DB::raw('COUNT(*) as count'), DB::raw('AVG(price) as avg_price')) ->groupBy('category_id') ->havingRaw('COUNT(*) > ? AND AVG(price) < ?', [5, 500]) ->get(); foreach ($res as $row) { echo $row->category_id . ' - count: ' . $row->count . ', avg: ' . $row->avg_price; } ?>

Результат выполнения кода:

"2 - count: 7, avg: 250.3" "4 - count: 6, avg: 320.8"

Пример

Используем именованные привязки для более сложного условия:

<?php use Illuminate\Support\Facades\DB; $minPrice = 100; $maxPrice = 500; $res = DB::table('products') ->select('category_id', DB::raw('MIN(price) as min_price'), DB::raw('MAX(price) as max_price')) ->groupBy('category_id') ->havingRaw('MIN(price) >= :min AND MAX(price) <= :max', [ 'min' => $minPrice, 'max' => $maxPrice ]) ->get(); foreach ($res as $row) { echo $row->category_id . ' - min: ' . $row->min_price . ', max: ' . $row->max_price; } ?>

Результат выполнения кода:

"1 - min: 120, max: 450" "3 - min: 150, max: 480"

Смотрите также

  • метод having,
    который добавляет простое условие HAVING
  • метод groupBy,
    который группирует результаты запроса
  • метод selectRaw,
    который добавляет сырые выражения в SELECT
  • метод whereRaw,
    который добавляет сырое условие WHERE
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить