关于yii的relations 与CDbCriteria类

原创
2013/09/18 18:14
阅读数 136

yii的relations里self::BELONGS_TO默认是用当前指定的键跟关联表的主键进行join,例如: return array( 'reply' => array(self::BELONGS_TO, 'BookPostReply', 'postid'), ); 默认生成的sql是 on id = postid,id是BookPostReply的主键。 但今天我遇到的需求却是需要生成 on BookPostReply.postid = t.postid,不去关联主键,而且关联其中一个字段的值,怎么搞都搞不定,论坛也翻了个遍,不得不说,yii的论坛搜索功能真的很烂,每次用都要从一堆的内容里过滤信息,还不见的能找到自己想要的,而且手册也比较简单,对这些东西没有做比较深入的解答。 后来无意中看到有个on的属性,刚好跟sql里的on一样,于是抱着试试的想法,在配置里加了上去 return array( 'reply' => array(self::BELONGS_TO, 'BookPostReply', 'postid', 'on' => 't.postid=reply.postid'), ); 看调试信息里的SQL语句,发现yii生成了一条 on id = postid and t.postid=reply.postid 这样的语句,看到这就已经明白这个东西的作用了,于是将postid清空,改成如下: return array( 'reply' => array(self::BELONGS_TO, 'BookPostReply', '', 'on' => 't.postid=reply.postid'), ); //============================================================== return array( 'typeid'=>array(self::BELONGS_TO,'Goodstype','huotypeid'), 'packid'=>array(self::BELONGS_TO,'Goodspack','huopackid'), ); 关联表之后,我们用的时候 需要CDbCriteria 这个类 $criteria= new CDbCriteria; $criteria->order='t.id desc';//排序 $criteria->addCondition('vipid=:vipid'); //变量vipid $criteria->params[':vipid']=1; //vipid赋值 $criteria->with=array('typeid','packid'); $count = Goods::model()->count($criteria); //所有信息的条数 $goods_list = Goods::model()->findAll($criteria); 用法:$goods->typeid->typename;// typename是主表的字段名 $goods->huoname ;//huoname 是从表的字段名

展开阅读全文
打赏
1
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部