Categories: 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条件,可以使用三种格式。

  • 字符串格式-‘名称= User10’
  • 哈希格式-[‘名称’=>’User10’,’电子邮件=> 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’,’id = 1’,’id = 2’]将生成id = 1 AND id = 2或:类似于and运算符
  • 之间-[[‘between’,’id’,1,15]之间将在1和15之间生成id
  • not between –与between运算符类似,但是BETWEEN被NOT NOTTWEEN取代
  • in − [‘in’,’id’,[5,10,15]]中将生成ID IN(5,10,15)
  • not in-类似于in运算符,但是IN被NOT IN代替
  • like -[[‘like’,’name’,’user’]将生成类似“%user%”的名称
  • 或like-与like运算子类似,但OR用于分割LIKE谓词
  • 不喜欢-类似于喜欢运算符,但是LIKE被NOT LIKE代替
  • 或不喜欢-类似于不喜欢运算符,但OR用于连接NOT LIKE谓词
  • 存在-需要一个操作数,该操作数必须是yii \ db \ Query类的实例
  • 不存在-类似于exist运算符,但构建一个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);
}

以下将是输出。

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

以下将是输出。

极限()偏移()方法定义了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() -从结果的第一行和第一列返回标量值。
  • exist() -返回一个值,该值指示查询是否包含任何结果
  • count()返回COUNT查询的结果
  • 其他聚合查询方法-包括sum($ q),average($ q),max($ q),min($ q)。$ q参数可以是列名或数据库表达式。
terry

这个人很懒,什么都没有留下~

Share
Published by
terry

Recent Posts

聊聊vue3中的defineProps

在Vue 3中,defineP…

1 周 ago

在 Chrome 中删除、允许和管理 Cookie

您可以选择删除现有 Cooki…

2 周 ago

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

3 周 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

4 周 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

1 月 ago

Vue3:手动清理keep-alive组件缓存的方法

Vue3中手动清理keep-a…

1 月 ago