我正在使用Laravel查询生成器根据用户的筛选 Select 动态筛选数据:

 $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`;

但我需要的是这样的东西(或语句周围有括号):

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查询生成器在WHERE条件周围添加括号?

推荐答案

我自己通过使用闭包解决了这个问题,如查询生成器文档100中所述.

 $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');

Laravel相关问答推荐

Laravel带S3存储器

在 Laravel 中排序的集合在 Vue 中突然不再排序

如何在Vite和Rollup中完全禁用分块?

在 blade laravel 中以格式编号显示长数字

未定义防护 [api] 的授权驱动程序 [api]

如何仅将日期列解析为月和日?

如何在 Laravel 中使用 Vue 路由?

Laravel 连接表

Laravel & Docker:无法打开流或文件/var/www/html/storage/logs/laravel.log:无法打开流:权限被拒绝

带有 Laravel Passport 的 SSO

你如何在自定义 Laravel Nova 工具中使用确认对话?

如何从 laravel 中的现有数据库创建迁移

Laravel Eloquent 在子查询中有两个WHERE NOT IN

验证匹配字符串

Laravel:命令未找到

Laravel Mix 生成字体到另一个目录

Laravel 邮件密件抄送

Laravel/PHPUnit:断言 json 元素存在而不定义值

在 laravel 的自定义路径中创建模型

如何在 Laravel 中 Refresh刷新用户对象?