
- Yii 教程
- Yii - 首页
- Yii - 概述
- Yii - 安装
- Yii - 创建页面
- Yii - 应用程序结构
- Yii - 入口脚本
- Yii - 控制器
- Yii - 使用控制器
- Yii - 使用操作
- Yii - 模型
- Yii - 小部件
- Yii - 模块
- Yii - 视图
- Yii - 布局
- Yii - 资源
- Yii - 资源转换
- Yii - 扩展
- Yii - 创建扩展
- Yii - HTTP 请求
- Yii - 响应
- Yii - URL 格式
- Yii - URL 路由
- Yii - URL 规则
- Yii - HTML 表单
- Yii - 验证
- Yii - 特设验证
- Yii - AJAX 验证
- Yii - 会话
- Yii - 使用闪存数据
- Yii - Cookie
- Yii - 使用 Cookie
- Yii - 文件上传
- Yii - 格式化
- Yii - 分页
- Yii - 排序
- Yii - 属性
- Yii - 数据提供者
- Yii - 数据小部件
- Yii - ListView 小部件
- Yii - GridView 小部件
- Yii - 事件
- Yii - 创建事件
- Yii - 行为
- Yii - 创建行为
- Yii - 配置
- Yii - 依赖注入
- Yii - 数据库访问
- Yii - 数据访问对象
- Yii - 查询构建器
- Yii - 活动记录
- Yii - 数据库迁移
- Yii - 主题
- Yii - RESTful API
- Yii - RESTful API 实战
- Yii - 字段
- Yii - 测试
- Yii - 缓存
- Yii - 片段缓存
- Yii - 别名
- Yii - 日志记录
- Yii - 错误处理
- Yii - 身份验证
- Yii - 授权
- Yii - 本地化
- Yii - Gii
- Gii – 创建模型
- Gii – 生成控制器
- Gii – 生成模块
- Yii 有用资源
- Yii - 快速指南
- Yii - 有用资源
- Yii - 讨论
Yii - 查询构建器
查询构建器允许您以编程方式创建 SQL 查询。查询构建器帮助您编写更易读的 SQL 相关代码。
要使用查询构建器,您应该按照以下步骤操作:
- 构建一个 yii\db\Query 对象。
- 执行查询方法。
要构建一个yii\db\Query对象,您应该调用不同的查询构建器函数来定义 SQL 查询的不同部分。
步骤 1 - 要展示查询构建器的典型用法,请修改actionTestDb方法如下所示。
public function actionTestDb() { //generates "SELECT id, name, email FROM user WHERE name = 'User10';" $user = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where(['name' => 'User10']) ->one(); var_dump($user); }
步骤 2 - 访问http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。

Where() 函数
where()函数定义查询的 WHERE 部分。要指定WHERE条件,您可以使用三种格式。
字符串格式 - 'name = User10'
哈希格式 - ['name' => 'User10', 'email' => 'user10@gmail.com']
运算符格式 - ['like', 'name', 'User']
字符串格式示例
public function actionTestDb() { $user = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where('name = :name', [':name' => 'User11']) ->one(); var_dump($user); }
输出如下。

哈希格式示例
public function actionTestDb() { $user = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where([ 'name' => 'User5', 'email' => 'user5@gmail.com' ]) ->one(); var_dump($user); }
输出如下。

运算符格式允许您以下列格式定义任意条件:
[operator, operand1, operand2]
运算符可以是:
and - ['and', 'id = 1', 'id = 2'] 将生成 id = 1 AND id = 2 或:类似于 and 运算符
between - ['between', 'id', 1, 15] 将生成 id BETWEEN 1 AND 15
not between - 类似于 between 运算符,但 BETWEEN 被替换为 NOT BETWEEN
in - ['in', 'id', [5,10,15]] 将生成 id IN (5,10,15)
not in - 类似于 in 运算符,但 IN 被替换为 NOT IN
like - ['like', 'name', 'user'] 将生成 name LIKE '%user%'
or like - 类似于 like 运算符,但 OR 用于分割 LIKE 谓词
not like - 类似于 like 运算符,但 LIKE 被替换为 NOT LIKE
or not like - 类似于 not like 运算符,但 OR 用于连接 NOT LIKE 谓词
exists - 需要一个操作数,该操作数必须是 yii\db\Query 类的实例
not exists - 类似于 exists 运算符,但构建 NOT EXISTS (子查询) 表达式
<, <=, >, >=, 或任何其他 DB 运算符:['<', 'id', 10] 将生成 id<10
运算符格式示例
public function actionTestDb() { $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where(['between', 'id', 5, 7]) ->all(); var_dump($users); }
输出如下。

OrderBy() 函数
orderBy()函数定义 ORDER BY 部分。
示例 -
public function actionTestDb() { $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->orderBy('name DESC') ->all(); var_dump($users); }
输出如下。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
groupBy() 函数
groupBy()函数定义 GROUP BY 部分,而having()方法指定 HAVING 部分。
示例 -
public function actionTestDb() { $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->groupBy('name') ->having('id < 5') ->all(); var_dump($users); }
输出如下。

limit()和offset()方法定义LIMIT和OFFSET部分。
示例 -
public function actionTestDb() { $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->limit(5) ->offset(5) ->all(); var_dump($users); }
您将看到以下输出:

yii\db\Query类提供了一组用于不同目的的方法:
all() - 返回一个名称-值对的行数组。
one() - 返回第一行。
column() - 返回第一列。
scalar() - 从结果的第一行和第一列返回一个标量值。
exists() - 返回一个值,指示查询是否包含任何结果
count() 返回 COUNT 查询的结果
其他聚合查询方法 - 包括 sum($q)、average($q)、max($q)、min($q)。$q 参数可以是列名或 DB 表达式。