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

Метод when

Метод when применяется к запросу Eloquent или Query Builder и позволяет динамически добавлять условия в зависимости от переданного значения. Первым параметром передаётся условие (значение, которое проверяется на истинность), вторым - замыкание, которое выполняется, если условие истинно. Третьим, необязательным параметром, передаётся замыкание, выполняемое при ложном условии.

Синтаксис

<?php Model::when($condition, $callback, $default); ?>

Пример

Давайте применим фильтрацию по статусу только в том случае, если переменная 'status' не равна null:

<?php use App\Models\Article; $status = 'published'; $res = Article::when($status, function ($query) use ($status) { $query->where('status', $status); })->get(); foreach ($res as $article) { echo $article->title; } ?>

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

"article 1" "article 2" "article 3"

Если бы переменная $status была равна null, условие where не было бы применено, и запрос вернул бы все статьи.

Пример

Метод when также принимает третий параметр - замыкание, которое выполняется при ложном условии. В этом примере мы добавим сортировку по дате создания, если поле 'sort' равно 'asc', иначе применим сортировку по убыванию:

<?php use App\Models\Article; $sort = 'asc'; $res = Article::when($sort === 'asc', function ($query) { $query->orderBy('created_at', 'asc'); }, function ($query) { $query->orderBy('created_at', 'desc'); })->get(); foreach ($res as $article) { echo $article->title; } ?>

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

"article 1" "article 2" "article 3"

Пример

Метод when отлично подходит для построения поисковых запросов с множеством необязательных параметров. В этом примере мы фильтруем статьи по автору и категории, если соответствующие параметры переданы:

<?php use App\Models\Article; $authorId = 5; $categoryId = null; $res = Article::when($authorId, function ($query) use ($authorId) { $query->where('author_id', $authorId); })->when($categoryId, function ($query) use ($categoryId) { $query->where('category_id', $categoryId); })->get(); foreach ($res as $article) { echo $article->title; } ?>

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

"article 5" "article 12" "article 23"

Поскольку $categoryId равен null, второе условие where не применяется, и выборка происходит только по автору.

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

  • метод unless,
    который применяет условие при ложном значении
  • метод tap,
    который позволяет выполнить действие с запросом без изменения результата
  • метод get,
    который выполняет запрос и возвращает коллекцию
  • метод first,
    который возвращает первую запись из результата запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить