欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二十、AR数据库的关联查询relations之多条数据查询

程序员文章站 2024-03-19 16:51:28
...

对于多条数据的AR查询,我们通常使用饥渴式加载

public function actionAll(){
        $users = User::model()->with('city','user_info')->findAll();
        dump($users);
    }
打印结果如下图
二十、AR数据库的关联查询relations之多条数据查询

二十、AR数据库的关联查询relations之多条数据查询

对于关联的表,我们还可以指定查询的条件,排序等等一些查询选项
比如我们指定只查询city表的name字段,with方法里需要用数组作为参数 
public function actionAll(){
        $users = User::model()->with(array(
            'city'=>array('select'=>'city.name'),
            'user_info'
            ))->findAll();
        dump($users);
    }
如下图,我们看到只取出了name和id字段的值,id是默认要取出来的
二十、AR数据库的关联查询relations之多条数据查询

比如我们还可以指定查询的条件

public function actionAll(){
        $users = User::model()->with(array(
            'city'=>array('select'=>'city.name','condition'=>'city.id=1'),
            'user_info'
            ))->findAll();
        dump($users);
    }
如图,查询结果只剩下一条符合city.id为1的

二十、AR数据库的关联查询relations之多条数据查询
关联查询时可以附加的类似condition这样的条件有很多,如下图,详细可以参考官方权威指南

二十、AR数据库的关联查询relations之多条数据查询

对于多数据的查询,更加灵活的做法是使用 查询生成器对象 CDbCriteria
 
像上面的查询场景我们可以表述为
public function actionAll(){
        $criteria = new CDbCriteria();
        $criteria->with = array(
            'city'=>array('select'=>'city.name','condition'=>'city.id=1'),
            'user_info'
        );
        $users = User::model()->findAll($criteria);
        dump($users);
    }
作者注:尽管YII为我们封装了优秀的AR查询方法,对于多条数据的查询来说,推荐大家使用更加高效的DAO方式,同样的查询条件DAO效率应该是AR的4倍左右。

转载于:https://my.oschina.net/lonxom/blog/168261