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,您将看到以下输出。

Query Builder

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);
}

输出如下。

String Format Example Output

哈希格式示例

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);
}

输出如下。

Hash Format Example Output

运算符格式允许您以下列格式定义任意条件:

[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);
}

输出如下。

Operator Format Example Output

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);
}

输出如下。

OrderBy Function Example Output

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);
}

输出如下。

groupBy Function Example Output

limit()offset()方法定义LIMITOFFSET部分。

示例 -

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->limit(5)
      ->offset(5)
      ->all();
   var_dump($users);
}

您将看到以下输出:

Limit Offset Fragments

yii\db\Query类提供了一组用于不同目的的方法:

  • all() - 返回一个名称-值对的行数组。

  • one() - 返回第一行。

  • column() - 返回第一列。

  • scalar() - 从结果的第一行和第一列返回一个标量值。

  • exists() - 返回一个值,指示查询是否包含任何结果

  • count() 返回 COUNT 查询的结果

  • 其他聚合查询方法 - 包括 sum($q)、average($q)、max($q)、min($q)。$q 参数可以是列名或 DB 表达式。

广告