Как добавить скобки вокруг условий с помощью Laravel query builder
Я использую построитель запросов Laravel для динамической фильтрации данных на основе выбора фильтра пользователя:
$query = DB::table('readings');
foreach ($selections as $selection) {
$query->orWhere('id', $selection);
}
$query->whereBetween('date', array($from, $to));
$query->groupBy('id');
когда я изучаю SQL, я получаю что-то вроде этого:
select count(*) as `count` from `readings` where `id` = 1 or id` = 2 and `date` between "2013-09-01" and "2013-09-31" group by `id`;
но мне нужно что-то вроде этого (с скобками вокруг операторов or):
select count(*) as `count` from `readings` where (`id` = 1 or id` = 2) and `date` between "2013-09-01" and "2013-09-31" group by `id`;
как добавить скобки вокруг условий с помощью Laravel query builder?
4 ответов
очень полезно, я использую этот:
->where(function ($query) use ($texto){
$query->where('UPPER(V_CODIGO)', 'LIKE', '%'.Str::upper($texto).'%')
->orWhere('UPPER(V_NOMBRE)', 'LIKE', '%'.Str::upper($texto).'%');
});
решил это сам, используя закрытие, как описано в Группировка Параметр в документации построителя запросов.
$query = DB::table('readings');
$this->builder->orWhere(function($query) use ($selections)
{
foreach ($selections as $selection) {
$query->orWhere('id', $selection);
}
});
$query->whereBetween('date', array($from, $to));
$query->groupBy('id');
Я не смог найти это в документации, whereNested
было то, что я ищу. Надеюсь, это кому-нибудь поможет.
$q->whereNested(function($q) use ($nameSearch) {
$q->where('name', 'LIKE', "%{$nameSearch}%");
$q->orWhere('surname', 'LIKE', "%{$nameSearch}%");
});
Примечание: это на Laravel 4.2
можно использовать WHERE IN
здесь для того же эффекта:
$query = DB::table('readings');
$query->whereIn('id', $selection)
$query->whereBetween('date', array($from, $to));
$query->groupBy('id');