Раньше, если тебе нужно было искать строку сразу по нескольким полям, код превращался в лапшу из вложенных orWhere. Копипаст, который повторялся в каждом втором проекте. Теперь можно писать нормально, читабельно и без боли.
whereAny()
Допустим, нужно найти пользователя, если совпадает хотя бы одно поле: имя, фамилия, email или телефон.
Старый способ выглядел примерно так:
User::where(function ($query) use ($search) {
$query->where('first_name', 'LIKE', "%$search%")
->orWhere('last_name', 'LIKE', "%$search%")
->orWhere('email', 'LIKE', "%$search%")
->orWhere('phone', 'LIKE', "%$search%");
});
Теперь это пишется в одну строку:
User::whereAny(
['first_name', 'last_name', 'email', 'phone'],
'LIKE',
"%$search%"
);
То же самое, только не надо городить вложенные функции и городить orWhere пачками.
whereAll()
Этот метод проверяет сразу по всем полям. Пример:
User::whereAll(
['first_name', 'last_name', 'email'],
'LIKE',
"%$search%"
);
Здесь запись попадёт в выборку только если условие совпадёт по каждому полю. Редкий случай, но бывает нужен: например, когда хочешь найти дубликаты или строгие совпадения по нескольким атрибутам сразу.
Когда это реально помогает
- Поиск в админке: ввёл «Иван» — ищешь по имени, фамилии, email и телефону одновременно.
- Универсальные фильтры: когда одно поле не спасает, а бизнес хочет «поиск везде».
- Быстрые проверки дубликатов: например, надо убедиться, что у пользователя совпадает и email, и номер телефона.
Раньше писали кастомные скоупы, которые выглядели как каша. Теперь это встроено.
Заключение
whereAny() и whereAll() — не магия, а просто сахар, который избавляет от кучи копипаста и делает запросы читаемыми. Меньше лапши в коде = меньше поводов материться при ревью.
0 комментариев