# where子句
### [](https://octobercms.com/docs/database/query#where-clauses)Where子句
#### 简单的where子句
要将`where`子句添加到查询,请`where`在查询构建器实例上使用方法。最基本的调用`where`需要三个参数。第一个参数是列的名称。第二个参数是运算符,可以是数据库支持的任何运算符。第三个参数是要针对该列求值的值。
例如,下面是一个查询,该查询验证“ votes”列的值等于100:
~~~
$users = Db::table('users')->where('votes', '=', 100)->get();
~~~
为方便起见,如果您只是想验证一列是否等于给定值,则可以将该值作为第二个参数直接传递给该`where`方法:
~~~
$users = Db::table('users')->where('votes', 100)->get();
~~~
当然,在编写`where`子句时,您可以使用其他各种运算符:
~~~
$users = Db::table('users')
->where('votes', '>=', 100)
->get();
$users = Db::table('users')
->where('votes', '<>', 100)
->get();
$users = Db::table('users')
->where('name', 'like', 'T%')
->get();
~~~
#### “或”语句
您可以将约束链接在一起,也`or`可以在查询中添加子句。该`orWhere`方法接受与该方法相同的参数`where`:
~~~
$users = Db::table('users')
->where('votes', '>', 100)
->orWhere('name', 'John')
->get();
~~~
> **提示:**您还可以前缀`or`到任何地方陈述方式下面,使条件的“OR”的条件-例如`orWhereBetween`,`orWhereIn`等等。
#### “之间”声明
该`whereBetween`方法验证列的值是否在两个值之间:
~~~
$users = Db::table('users')
->whereBetween('votes', [1, 100])->get();
~~~
该`whereNotBetween`方法验证列的值是否位于两个值之外:
~~~
$users = Db::table('users')
->whereNotBetween('votes', [1, 100])
->get();
~~~
#### “在哪里”声明
该`whereIn`方法验证给定数组中是否包含给定列的值:
~~~
$users = Db::table('users')
->whereIn('id', [1, 2, 3])
->get();
~~~
该`whereNotIn`方法验证给定数组中**不**包含给定列的值:
~~~
$users = Db::table('users')
->whereNotIn('id', [1, 2, 3])
->get();
~~~
#### “ Where null”语句
该`whereNull`方法验证给定列的值为`NULL`:
~~~
$users = Db::table('users')
->whereNull('updated_at')
->get();
~~~
该`whereNotNull`方法验证列的值**不是**`NULL`:
~~~
$users = Db::table('users')
->whereNotNull('updated_at')
->get();
~~~
### [](https://octobercms.com/docs/database/query#advanced-where-clauses)高级where子句
#### 参数分组
有时,您可能需要创建更高级的where子句,例如“ where where”或嵌套参数分组。Laravel查询构建器也可以处理这些。首先,让我们看一下括号内分组约束的示例:
~~~
Db::table('users')
->where('name', '=', 'John')
->orWhere(function ($query) {
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
~~~
如您所见,传递`Closure`给`orWhere`方法将指示查询构建器开始约束组。该`Closure`会收到您可以使用设置应包含在括号组内的约束的查询生成器实例。上面的示例将产生以下SQL:
~~~
select * from users where name = 'John' or (votes > 100 and title <> 'Admin')
~~~
#### 存在陈述
该`whereExists`方法允许您编写`where exist`SQL子句。该`whereExists`方法接受一个`Closure`参数,该参数将接收一个查询构建器实例,该实例允许您定义应放置在“ exists”子句中的查询:
~~~
Db::table('users')
->whereExists(function ($query) {
$query->select(Db::raw(1))
->from('orders')
->whereRaw('orders.user_id = users.id');
})
->get();
~~~
上面的查询将产生以下SQL:
~~~
select * from users where exists (
select 1 from orders where orders.user_id = users.id
)
~~~
#### JSON“ where”语句
October CMS还支持在提供对JSON列类型的支持的数据库上查询JSON列类型。要查询JSON列,请使用`->`运算符:
~~~
$users = Db::table('users')
->where('options->language', 'en')
->get();
$users = Db::table('users')
->where('preferences->dining->meal', 'salad')
->get();
~~~
您可以`whereJsonContains`用来查询JSON数组(SQLite不支持):
~~~
$users = Db::table('users')
->whereJsonContains('options->languages', 'en')
->get();
~~~
MySQL和PostgreSQL支持`whereJsonContains`多个值:
~~~
$users = Db::table('users')
->whereJsonContains('options->languages', ['en', 'de'])
->get();
~~~
您可以用来`whereJsonLength`按其长度查询JSON数组:
~~~
$users = Db::table('users')
->whereJsonLength('options->languages', 0)
->get();
$users = Db::table('users')
->whereJsonLength('options->languages', '>', 1)
->get();
~~~
### [](https://octobercms.com/docs/database/query#conditional-clauses)条件条款
有时,您可能希望子句仅在其他情况成立时才应用于查询。例如,`where`如果传入请求中存在给定的输入值,则您可能只想应用语句。您可以使用以下`when`方法完成此操作:
~~~
$role = $request->input('role');
$users = Db::table('users')
->when($role, function ($query, $role) {
return $query->where('role_id', $role);
})
->get();
~~~
该`when`方法仅在第一个参数为时执行给定的闭包`true`。如果第一个参数是`false`,将不执行闭包。
您可以将另一个Closure作为方法的第三个参数传递`when`。如果第一个参数的值为假,则此闭包将执行。为了说明如何使用此功能,我们将使用它来配置查询的默认排序:
~~~
$sortBy = null;
$users = Db::table('users')
->when($sortBy, function ($query, $sortBy) {
return $query->orderBy($sortBy);
}, function ($query) {
return $query->orderBy('name');
})
->get();
~~~
- 基本说明
- 基本操作
- October cms 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图