- 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 - 列表视图小部件
 - Yii - GridView 小部件
 - Yii - 活动
 - Yii - 创建事件
 - Yii - Behave
 - Yii - 创建Behave
 - 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条件,可以使用三种格式。
字符串格式- '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] 将生成 1 AND 15 之间的 id
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'] 将生成名称 LIKE '%user%'
or like - 类似于like运算符,但OR用于分割LIKE谓词
not like - 类似于like操作符,但LIKE被替换为NOT LIKE
or not like - 类似于 not like 运算符,但 OR 用于连接 NOT LIKE 谓词
存在- 需要一个操作数,该操作数必须是 yii\db\Query 类的实例
不存在- 类似于存在运算符,但构建一个 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);
}
以下将是输出。
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() - 从结果的第一行和第一列返回标量值。
contains() - 返回一个值,指示查询是否包含任何结果
count()返回 COUNT 查询的结果
其他聚合查询方法- 包括 sum($q)、average($q)、max($q)、min($q)。$q 参数可以是列名或数据库表达式。