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]

运营商可以 -

  • - ['和','id = 1','id = 2']将生成id = 1 AND id = 2或者:与和运算符相似
  • 之间 - ['之间','id',1,15]将生成ID BETWEEN 1和15
  • 不在 - 类似于运算符之间,但BETWEEN被替换为NOT BETWEEN
  • in - ['in','id',[5,10,15]]将生成id IN(5,10,15)
  • 不在 - 与in运算符类似,但IN被替换为NOT IN
  • - ['like','name','user']将生成名称LIKE'%user%'
  • 或者类似于 类似的运算符,但OR用于拆分LIKE谓词
  • 不像 - 类似于like运算符,但LIKE被替换为NOT LIKE
  • 或不喜欢 - 类似于不喜欢的运算符,但OR用于连接NOT LIKE谓词
  • 存在 - 需要一个操作数,它必须是yii \ db \ Query类的一个实例
  • 不存在 - 与存在运算符类似,但构建NOT EXISTS(子查询)表达式
  • < ,<=,>,> =或任何其他数据库操作符:['<','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);
}

以下将是输出。

OrderBy函数示例输出

groupBy()函数

所述 GROUPBY() 函数定义的GROUP BY片段,而 具有() 方法指定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函数示例输出

极限()偏移() 方法定义了 LIMITOFFSET 片段。

示例 -

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

你可以看到下面的输出 -

限制偏移片段

警予\ DB \查询 类提供了一组用于不同目的的方法-

  • all() - 返回名称 - 值对行的数组。
  • one() - 返回第一行。
  • column() - 返回第一列。
  • scalar() - 从结果的第一行和第一列返回标量值。
  • exists() - 返回一个值,该值指示查询是否包含任何结果
  • count() 返回COUNT查询的结果
  • 其他汇总查询方法 - 包括总和($ q),平均值($ q),最大值($ q),最小值($ q)。 $ q参数可以是列名称或DB表达式。

下一章:Yii 活跃记录

Active Record为访问数据提供了一个面向对象的API。Active Record类与数据库表关联。Yii为以下关系数据库提供Active Record支持 -MySQL 4.1或更高版本SQLite 2和3:Po ...