‬yii2 如何使用数据库(三) 之使用QueryBulider

来源:互联网 发布:mac打不开google 编辑:程序博客网 时间:2024/05/19 04:51

  • 导言
  • 什么是QuertBuilder查询构建器
  • 如何使用查询构建器
    • 构建查询
      • select
        • 使用字符串或数组来指定要查询的数据
        • 使用子查询
        • 如果不写select 就相当于select查询所有字段
      • from
        • from 方法指定了 SQL 语句当中的 FROM 子句例如
        • 子查询
      • where
      • orderBy
    • 执行查询

导言

上几张我讲了如何用ActiveRecord*CreateCommand*来连接数据库, 今 天我们来了解一下,如何用QueryBulider来建立和数据库之间的关联关系

什么是QuertBuilder查询构建器?

查询构建器建立在 Database Access Objects 基础之上,可让你创建 程序化的、DBMS无关的SQL语句。相比于原生的SQL语句,更易读,更安全

如何使用查询构建器

查询构建器使用分为两个步骤

  1. 创建一个 yii\db\Query 对象来代表一条 SELECT SQL 语句的不同子句(例如 SELECT, FROM)。
  2. 执行 yii\db\Query 的一个查询方法(例如:all())从数据库当中检索数据。

形式如下:

$rows = (new \yii\db\Query())    ->select(['id', 'email'])    ->from('user')    ->where(['last_name' => 'Smith'])    ->orderBy(id)    ->limit(10)    ->indexBy(id)    ->all();

构建查询

我们根据上面的例子,一条一条看。

select()

使用字符串或数组来指定要查询的数据

select(['id','name']);//等同select('id,name');

也可以想写原生的sql语句一样写一些select的操作

$query->select(['user.id AS user_id', 'email']);// 等同于:$query->select('user.id AS user_id, email');//或者$query->select(['user.id'=>'user_id', 'email']);//再或$query->select(['user.id AS user_id', 'email']);

使用子查询

$subQuery = (new Query())->select('COUNT(*)')->from('user');// SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post`$query = (new Query())->select(['id', 'count' => $subQuery])->from('post');

如果不写select 就相当于select(‘*’)查询所有字段

from()

from() 方法指定了 SQL 语句当中的 FROM 子句。例如:

$query->from('user');//也可以想原生的sql语句一样使用别名,和数据库前缀$query->from(['public.user u', 'public.post p']);// 等同于:$query->from('public.user u, public.post p');

子查询

$subQuery = (new Query())->select('id')->from('user')->where('status=1');// SELECT * FROM (SELECT `id` FROM `user` WHERE status=1) u $query->from(['u' => $subQuery]);

where()

用来设定查询条件

以前已经做过介绍了,这里就跳过

image

orderBy()

执行查询