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

xiaoxiao2021-02-28  56

地址: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']),

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

转载请注明原文地址: https://www.6miu.com/read-35814.html

最新回复(0)