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

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

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

二十、AR数据库的关联查询relations之多条数据查询_第2张图片

对于关联的表,我们还可以指定查询的条件,排序等等一些查询选项
比如我们指定只查询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之多条数据查询_第3张图片

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

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之多条数据查询_第4张图片
关联查询时可以附加的类似condition这样的条件有很多,如下图,详细可以参考官方权威指南

二十、AR数据库的关联查询relations之多条数据查询_第5张图片

对于多数据的查询,更加灵活的做法是使用 查询生成器对象 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倍左右。

你可能感兴趣的:(yii,yii视频)