Yii1中用CDbCriteria进行多表链接查询数据只有一个表字段的解决方法 [ 1.1 版本 ]

地址:http://www.yiichina.com/tutorial/1352

在业务逻辑稍微复杂的情况下我们都需要进行多表链接查询!

我们都知道CDbCriteria常用的操作有这些:

$criteria = new CDbCriteria; 
$criteria->addCondition("id=1"); //查询条件,即where id =1  
$criteria->addInCondition('id', array(1,2,3,4,5));//代表where id IN (1,23,,4,5,);  
$criteria->addNotInCondition('id',array(1,2,3,4,5));//与上面正好相法,是NOT IN  
$criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND 
$criteria->addSearchCondition('name','分类');//搜索条件,其实代表了。。where name like '%分类%'  
$criteria->addBetweenCondition('id', 1, 4);//between1 and 4   

$criteria->compare('id',1);   //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,即如果第二个参数是数组就会调用addInCondition  

$criteria->addCondition("id = :id"); 
$criteria->params[':id']=1;  

$criteria->select = 'id,parentid,name';//代表了要查询的字段,默认select='*';  
$criteria->join = 'xxx'; //连接表 
$criteria->with = 'xxx';//调用relations   
$criteria->limit =10;   //取1条数据,如果小于0,则不作处理  
$criteria->offset =1;   //两条合并起来,则表示 limit 10 offset1,或者代表了。limit 1,10  
$criteria->order = 'xxx DESC,XXX ASC' ;//排序条件 
$criteria->group = 'group 条件'; 
$criteria->having = 'having 条件 '; 
$criteria->distinct = FALSE;//是否唯一查询
所以我们在使用多表链接的时候会这样操作:

$workCriteria = new CDbCriteria();
$workCriteria->join = 'LEFT JOIN oa_packing_order as po ON po.id=t.packing_order_id LEFT JOIN oa_packing_material as pm ON po.packingid=pm.id';

$workCriteria->select = "t.*,pm.type,po.packing,po.supplier,po.number,po.code";
$workCriteria->addCondition("查询条件");
$workCriteria->order = $order = '排序方法';
$model = Reports::model()->findAll($workCriteria);
可以这样得到的结果却只是我Reports这个表的字段,我在网上查了一下,也没找到原因,但是如果你把sql语句打印出来执行发现并没有什么问题

后来我在模型中relations方法中这么写:

public function relations()
{
  // NOTE: you may need to adjust the relation name and the related
  // class name for the relations automatically generated below.
  return array(
      'packing_order'=>array(
          self::BELONGS_TO,
          'PackingOrder', 
          ['packing_order_id' => 'id'],
          'select'=>'packing,supplier,number,code'
      ),
  );
}

奇迹竟然出现了,我所连的三个表的数据都可以查出来了!(注意查出来的数据是一个对象!!并不是数组)

很多像我这样的新手可能不知道relations里面应该怎么写,特别是多个表之间连接查询的时候,这时候你可以参考一下官方类手册http://www.yiichina.com/doc/api/1.1/CActiveRecord#relations-detail

提醒一个就是,有多个比如3个A,B,C表连接时,A.bid=B.id,b.cid = c.id这种连接情况时,
在A模型的relations中这么写:

'packing_order'=>array(self::BELONGS_TO, 'B', ['a.bid' => 'b.id'],'with'=>'B模型中的relations_name'), 
在B的模型relations中这么写:

'relations_name'=>array(self::BELONGS_TO, 'C', ['b.cid' => 'c.id']), 

这样的话三个表就能连起来啦!!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值