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 exist −类似于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); }
以下是输出。
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 表达式。