Yii框架关联查询with用法分析 |
本文实例分析了Yii框架关联查询with用法 。分享给大家供大家参考 。具体方法如下: Yii框架关联查询与mysql中的关联查询会有什么区别呢?这里小编就与各位来一起来看看吧 。 Yii的关联查询确实是一个方便的东西,网上的资料也很多,但是大部分都是Ctrl+c,Ctrl+v,有些东西一直没有人出来详细的写篇文章说明一下,在参考了网上很多资源以后,加上自己的的一些理解,写下了这篇文章,给广大初学者朋友们提供一点个人见解 。 BELONGS_TO(属于): 如果表 A 和 B 之间的关系是一对多,则 表 B 属于 表 A (例如 Post 属于 User); 初学的时候,个人表示头晕至极,经过反复的测试,我给大家非常直白的解释一下 。 复制代码 代码如下: $blogs = $blog_model->with(b_user)->find(); model 这里的model指的是blog_model 复制代码 代码如下: b_user=>array(self::BELONGS_TO, user, author) 适用范围,查找博客的时候需要把博客的作者也查出来 。 b_user中第二个参数:子表的表名,第三个参数,主表中用于存子表主键的字段(blog表中用于存user表主键的字段) 。 HAS_ONE: controller 复制代码 代码如下: $user_blog = $user_model->with(u_blog)->find(); model 这里的的model指的是user_model 复制代码 代码如下: u_blog=>array(self::HAS_ONE, blog, author) 测试一下,不仅仅查出了作者的信息,而且还查出了一篇该作者的博客 。 u_blog中的第二个参数:子表表名,第三个参数,子表中用于存主表主键的字段(blog表中用于存user表主键的字段) 。 HAS_MANY: controller 复制代码 代码如下: $user_blogs = $user_model->with(u_blogs)->find(); model 这里的的model指的是user_model 复制代码 代码如下: u_blogs=>array(self::HAS_MANY, blog, author) 测试一下,不仅仅查出了作者的信息,也不仅仅查出了一篇该作者的博客,而且还查出了该作者其它的博客 。 u_blogs中的第二个参数:子表表名,第三个参数,子表中用于存主表主键的字段(blog表中用于存user表主键的字段) 。 MANY_TO_MANY: 这个东西啊,我还没用过,貌似基本上也不会用到,待我测一下,再来续上 。 。 。 至此,Yii with的最最基本用法说的差不多了,但是你就没有啥疑问吗? 如何指定要查询的子表字段? HAS_MANY中查出了该用户的所有文章,如果我只想要查5篇呢? ……等你来提问 。 那么,废话不多说,解决第一个问题 复制代码 代码如下: u_blogs=>array(self::HAS_MANY, blog, author,select=>gid,title,content) 这样试试? 第二个问题 复制代码 代码如下: u_blogs=>array(self::HAS_MANY, blog, author,select=>gid,title,content,condition=>u_blogs.gid=2) 搞定! 相信看过这些非常小白的讲解后应该恍然大悟了吧 。此所谓万事开头难啊,剩下的东西相信你一看就懂了''' 以下内容来自Yii手册: 延迟加载时有一定的关系,下列选项可用: group: string, GROUP BY子句 。 默认值为空 。 注意,列引用需要加入relationName前缀 。(例如: relationName.age) 。此选项仅适用于HAS_MANY 和 MANY_MANY 关系 。 having: string, HAVING子句 。 默认值为空 。 注意,列引用需要加入relationName前缀 。(例如: relationName.age) 。此选项仅适用于HAS_MANY 和 MANY_MANY 关系 。 limit: 数据行的limit选择 。 这个选项不能应用到BELONGS_TO 。 offset: 数据行的偏移量 。 这个选项不能应用到BELONGS_TO 。 through: 获取相关的数据时将用作桥的模型的关系的名称 。可以设置仅为 HAS_ONE 和 HAS_MANY 。此选项自版本 1.1.7 可用 。 以下是一个例子,为 Post 活动记录类相关对象的一个示例: 复制代码 代码如下: return array(
author=>array(self::BELONGS_TO, User, author_id), comments=>array(self::HAS_MANY, Comment, post_id, with=>author, order=>create_time DESC), tags=>array(self::MANY_MANY, Tag, post_tag(post_id, tag_id), order=>name), ); 希望本文所述对大家的yii框架程序设计有所帮助 。 |