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

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

public function actionAll(){
        $users = User::model()->with('city','user_info')->findAll();
        dump($users);
    }
打印结果如下图


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

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

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的


关联查询时可以附加的类似condition这样的条件有很多,如下图,详细可以参考官方权威指南

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值