У меня 5 названий пользователей, определенных booleans: CEO, executive, manager, employee & intern.Laravel Eloquent ORM: Строительство вложенных условных запросов
Я создаю API поиска и хочу включить/выключить красноречивые запросы, возвращая пользователей с выбранными заголовками.
Так что, если бы я был поиск для руководителей и сотрудников, запрос должен быть
$users = User::where(function($query)
{
$query->orWhere('manager')->orWhere('employee');
})
->where([ADDITIONAL CONSTRAINTS... (like age)])->get();
Самая дальняя я пришел это:
$query = User::query();
//the respective titles are turned on by 1 and turned off by 0
if($CEO) {
$query = $query->orWhere('CEO');
}
if($executive) {
$query = $query->orWhere('executive');
}
//And so on for each title
В конце дополнительного где ограничения добавляются как это:
$users = $query->where([Additional constraints])->get();
При поиске менеджеров и сотрудников окончательный запрос:
$users = User::orWhere('manager')->orWhere('employee')
->where([ADDITIONAL CONSTRAINTS... (like age)])->get();
Результатом этого запроса является то, что дополнительные ограничения не всегда выполняются, потому что есть orwhere запросы до, которые позволяют нежелательных случаев, чтобы получить выбранный.
Я попытался заменить или где-то где-то, но тогда пользователям нужно проверить положительное значение для каждого выбранного заголовка, чтобы его выбрали. Поэтому, если бы я хотел найти менеджеров и сотрудников, я мог бы не получить их, потому что нет ни одного пользователя с обоими заголовками.
Цель:
- Я хочу, чтобы добавить все эти условные «титульного запросы» вместе.
- Поместите их все в один, где (функция ($ query) {$ query -> [all 'title-queries'];}).
Дополнительные комментарии:
Я знаю, что я мог бы устранить все другие модели вместо поиска разыскиваемых моделей. Если бы я искал менеджеров и сотрудников, я мог бы установить, где («CEO», «! =», 1) для каждого нежелательного названия. Я не хочу этого, потому что в некоторых случаях пользователи с двумя заголовками, такими как сотрудник и промежуточный, будут исключены.
Я знаю, что я мог бы написать вложенные условные запросы для каждого сценария, т.е. (менеджер & CeO, временный & & генерального директора и на ...), но это было бы взять 25 запросов и просто не легко масштабируются (экспоненциальным более запросов), если добавлены дополнительные названия пользователей.
Это должно быть Яркое решение.
Пользователи могут иметь несколько названий.
Я продумал эту проблему, спасибо!
Спасибо! Ваше решение работает, единственное редактирование, которое я сделал, заключалось в добавлении {} в цикл foreach. ура – Eltyer