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

Метод having

Метод having применяется к запросу Query Builder и используется для фильтрации группированных записей. Он работает аналогично методу where, но применяется после группировки данных с помощью groupBy. Первым параметром передаётся имя колонки, вторым - оператор сравнения, третьим - значение. Если оператор не указан, используется равенство.

Синтаксис

<?php DB::table($table) ->groupBy($column) ->having($column, $operator, $value) ->get(); ?>

Пример

Давайте сгруппируем статьи по пользователям и оставим только тех, у кого количество статей больше 5:

<?php namespace AppHttpControllers; use Illuminate\Support\Facades\DB; class ArticleController extends Controller { public function index() { $res = DB::table('articles') ->select('user_id', DB::raw('count(*) as total')) ->groupBy('user_id') ->having('total', '>', 5) ->get(); echo json_encode($res); } } ?>

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

[{"user_id":3,"total":7},{"user_id":8,"total":6}]

Пример

Давайте найдём категории со средней стоимостью товаров больше 500:

<?php namespace AppHttpControllers; use Illuminate\Support\Facades\DB; class ProductController extends Controller { public function index() { $res = DB::table('products') ->select('category', DB::raw('avg(price) as avg_price')) ->groupBy('category') ->having('avg_price', '>', 500) ->get(); echo json_encode($res); } } ?>

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

[{"category":"electronics","avg_price":750.5},{"category":"furniture","avg_price":620.25}]

Пример с несколькими условиями

Метод having можно использовать несколько раз для добавления дополнительных условий:

<?php namespace AppHttpControllers; use Illuminate\Support\Facades\DB; class OrderController extends Controller { public function index() { $res = DB::table('orders') ->select('customer_id', DB::raw('count(*) as orders_count'), DB::raw('sum(total) as total_sum')) ->groupBy('customer_id') ->having('orders_count', '>', 10) ->having('total_sum', '>', 5000) ->get(); echo json_encode($res); } } ?>

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

[{"customer_id":5,"orders_count":12,"total_sum":6800.5}]

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

  • метод groupBy,
    который группирует записи перед применением having
  • метод havingRaw,
    который позволяет использовать сырые SQL-выражения в условии
  • метод where,
    который фильтрует записи до группировки
  • метод get,
    который выполняет запрос и возвращает коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить