Я использую конструктор запросов Laravel Eloquent, и у меня есть запрос, в котором я хочу WHERE
предложение по нескольким условиям. Это работает, но это не элегантно.
Пример:
$results = User::where('this', '=', 1)
->where('that', '=', 1)
->where('this_too', '=', 1)
->where('that_too', '=', 1)
->where('this_as_well', '=', 1)
->where('that_as_well', '=', 1)
->where('this_one_too', '=', 1)
->where('that_one_too', '=', 1)
->where('this_one_as_well', '=', 1)
->where('that_one_as_well', '=', 1)
->get();
Есть ли лучший способ сделать это, или я должен придерживаться этого метода?
->where(...)
вызовов могут быть заменены->whereIn(...)
вызовом и так далее .Ответы:
В Laravel 5.3 (и все еще верно для 7.x ) вы можете использовать более гранулированные порции, переданные в виде массива:
Лично я не нашел варианта использования этого для нескольких
where
звонков, но факт в том, что вы можете использовать его.С июня 2014 года вы можете передать массив
where
Если вы хотите
wheres
использовать всеand
операторы использования , вы можете сгруппировать их следующим образом:Затем:
Выше приведен такой запрос:
источник
=
.WHERE (a IS NOT NULL AND b=1) OR (a IS NULL AND b=2);
?$users = DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();
whereNotIn
согласно вашему ответу, наличие другихwhere
улик?Области запросов могут помочь вам сделать ваш код более читабельным.
http://laravel.com/docs/eloquent#query-scopes
Обновление этого ответа с некоторым примером:
В вашей модели создайте методы областей видимости:
Затем вы можете вызвать эти области при построении запроса:
источник
Вы можете использовать подзапросы в анонимной функции следующим образом:
источник
В этом случае вы можете использовать что-то вроде этого:
Он должен предоставить вам такой запрос:
источник
Условия использования массива:
Будет производить запрос, как показано ниже:
Условия использования анонимной функции:
Будет производить запрос, как показано ниже:
источник
Несколько где предложения
наконец-то получить результат
источник
whereColumn
Метод может быть передан массив из нескольких условий. Эти условия будут присоединены с помощьюand
оператора.Пример:
Для получения дополнительной информации проверьте этот раздел документации https://laravel.com/docs/5.4/queries#where-clauses
источник
ИЛИ
ИЛИ
источник
Обязательно примените любые другие фильтры к подзапросам, иначе или может собрать все записи.
источник
источник
Без реального примера трудно дать рекомендацию. Однако мне никогда не приходилось использовать столько предложений WHERE в запросе, и это может указывать на проблему со структурой ваших данных.
Вам может быть полезно узнать о нормализации данных: http://en.wikipedia.org/wiki/Third_normal_form
источник
Вы можете использовать eloquent в Laravel 5.3
Все результаты
Частичные результаты
источник
использовать
whereIn
условие и передать массив$array = [1008,1009,1010];
User::whereIn('users.id', $array)->get();
источник
Вы можете использовать массив в предложении where, как показано ниже.
источник
источник
Согласно моему предложению, если вы делаете фильтр или поиск
тогда вы должны пойти с:
источник
Использовать этот
источник
Используя чистый Eloquent, реализуйте его так. Этот код возвращает всех зарегистрированных пользователей, чьи учетные записи активны.
$users = \App\User::where('status', 'active')->where('logged_in', true)->get();
источник
Образец кода.
Во-первых :
массив заполняется здесь, используя желаемое количество / цикл условий, постепенно:
и здесь:
и далее с красноречиями, такими как:
источник
источник
источник