Yii framwork crud Relational Active Record [ 未指定版本 ]
如果是刚接触YII的话你一定还对它的Relational Active Record不是太了解吧,其实它对你联表查询有很大帮助的,能自动帮你完成很多事,可谓是省心省时又省力,下面举例说明下:http://blog.csdn.net/lucifer_qiao/article/details/8744186
在我们正式使用这个方便的关系引用之前,先要去模型中定义relations方法以覆盖父类(AR)中的这个方法,那我们从这个方法开始,在这个方法中其实是返回一个关系型的配置数组,现在我们来举例,假设我们有两个表:
表user 字段 id(pk),user,name
表post 字段 id(pk),title,author_id(fk)
官方示例:''varname"=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options) varname
//这个是可以自定义的其实相当关联表的缩写
比如:select * from abc a left join cba c on c.id=a.id
通常yii 中会把当前模型对应的表定义为 t 如果你打印是可以看到的就像这样:select * from abc t left join cba c on c.id=t.id
这个c就是我们的varname,要记住这个一会我们会用到
RelationType //这个是Yii中定义的几种表间关系,假我们在表A模型中
BELONGS_TO(属于): 表A属于表B ;
HAS_MANY(有多个): 表A 有多个 B ;
HAS_ONE(有一个) : 表A 最多有一个 B ;
MANY_MANY: 表A有多个表B,表B同A
ClassName //模型的名字,比如:/models/Post.php 那么这里就是Post
ForeignKey //可以是多个,也可以是一个
当然也有意外情况发生比如,你不想关联主键了或是外键了那么你可以不写,那么你可以按这种格式来写On条件
“post"=>array("SELF::HAS_MANY","Post",'',"on"=>"t.id=post.id")
这样条件就更灵活了,你也可以把等于变小于,然后就是其他额外选项了接下来就是通过with()配合我们的查询使用了,假设我们定义了一个关系 ”p"=>array("SELF::HAS_MANY","Post","author_id")
,
1,我想找某个人写了哪写文章
User::model()->with("p")->findAllByPk($user_id);
sql执行:select * from user t left outer join post p on p.author_id=t.id where t.id=$user_id;
- 因为yii的jointype默认是left outer join,而当我们想利用这个关系进行内连接查询进怎么办,我们可以这样
User::model()->with(array("p"=>array('joinType' => 'INNER JOIN')))->findAllByPk($user_id);
sql执行:select * from user t inner join post p on p.author_id=t.id where t.id=$user_id;
- 因为mysql不支持全连接这样的形式,现在确需要用全连接的话,我们最好还是选用union来解决
游学
最后登录:2014-09-19
在线时长:0小时2分
- 粉丝5
- 金钱70
- 威望60
- 积分670
共 0 条评论