首页 > yii2教程 > yii2数据库使用

yii2数据库查询生成器--select、from函数用法

创建查询 

要创建一个 yii\db\Query 对象,你需要调用不同的查询构建方法来代表SQL语句的不同部分。 这些方法的名称对应了在SQL语句相应子句中使用的关键字。

如,要指定 SQL 语句中的 FROM 子句,你应该调用 from()方法。所有的查询生成器方法返回的是查询对象本身, 即能把多个方法的调用串联起来。

 

select()

select() 方法指定了 SQL 语句中的 SELECT 子句。 使用一个数组或者字符串来定义需要查询的字段。查询对象在生成 SQL 语句时,被查询的字段名称将会自动的被引号括起来。

$query->select(['id', 'title']);  //数组方式指定select字段

// 等同于:

$query->select('id, title'); //字符串方式指定select字段

要查询的字段也能包含表前缀,或者字段别名。 如:

$query->select(['user.id AS user_id', 'title']);

// 等同于:

$query->select('user.id AS user_id, title');

如果使用数组格式来指定字段,也能使用数组的键值来表示字段的别名。 上面的代码等于如下形式:

$query->select(['user_id' => 'user.id', 'title']);

如果没有调用 select() 方法,那么选择的将是 '*' (select *), 也即查询的是所有的字段。

2.0.1 的版本开始你就能使用子查询了。在定义每一个子查询的时候, 需要使用 yii\db\Query 对象。如:

$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');

调用 distinct() 方法来去除重复行,如:

// SELECT DISTINCT `user_id` ...
$query->select('user_id')->distinct();

如果要添加一个查询字段,调用 addSelect() 方法来指定附加字段,如:

$query->select(['id', 'title'])
->addSelect(['phone']);

 

from()

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

// SELECT * FROM `user`
$query->from('user');

使用字符串或者数组的形式来指定被查询的表名称。表名称里面能包含数据库前缀,或者表别名。如:

$query->from(['public.user u', 'public.post p']);

// 等同于:

$query->from('public.user u, public.post p');

如果使用的是数组的格式,能用数组的键值来定义表别名,如: 

$query->from(['u' => 'public.user', 'p' => 'public.post']); 

能从子查询中再次查询,这里的子查询是由 yii\db\Query 创建的对象。 如: 

$subQuery = (new Query())->select('id')->from('user')->where('status=1');


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

 

美景欣赏

美景欣赏

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。