导言
上几张我讲了如何用ActiveRecord和*CreateCommand*来连接数据库, 今 天我们来了解一下,如何用QueryBulider来建立和数据库之间的关联关系
什么是QuertBuilder查询构建器?
查询构建器建立在 Database Access Objects 基础之上,可让你创建 程序化的、DBMS无关的SQL语句。相比于原生的SQL语句,更易读,更安全
如何使用查询构建器
查询构建器使用分为两个步骤
- 创建一个 yii\db\Query 对象来代表一条 SELECT SQL 语句的不同子句(例如 SELECT, FROM)。
- 执行 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()
用来设定查询条件
以前已经做过介绍了,这里就跳过