Yii框架关联查询with用法分析

 更新时间:2014年12月02日 09:01:48   投稿:shichen2014  
这篇文章主要介绍了Yii框架关联查询with用法,以实例形式较为详细的分析了yii支持的四种类型关系的具体用法,是使用yii框架进行关联查询时非常实用的技巧,需要的朋友可以参考下

本文实例分析了Yii框架关联查询with用法。分享给大家供大家参考。具体方法如下:

Yii框架关联查询与mysql中的关联查询会有什么区别呢?这里小编就与各位来一起来看看吧。

Yii的关联查询确实是一个方便的东西,网上的资料也很多,但是大部分都是Ctrl+c,Ctrl+v,有些东西一直没有人出来详细的写篇文章说明一下,在参考了网上很多资源以后,加上自己的的一些理解,写下了这篇文章,给广大初学者朋友们提供一点个人见解。

YII 支持四种类型的关系:

BELONGS_TO(属于): 如果表 A 和 B 之间的关系是一对多,则 表 B 属于 表 A (例如 Post 属于 User);
HAS_MANY(有多个): 如果表 A 和 B 之间的关系是一对多,则 A 有多个 B (例如 User 有多个 Post);
HAS_ONE(有一个): 这是 HAS_MANY 的一个特例,A 最多有一个 B (例如 User 最多有一个 Profile);
MANY_MANY: 这个对应于数据库中的 多对多 关系。 由于多数 DBMS 不直接支持 多对多 关系,因此需要有一个关联表将 多对多 关系分割为 一对多 关系。
 
菜鸟们看到这个真的能明白吗?

初学的时候,个人表示头晕至极,经过反复的测试,我给大家非常直白的解释一下。
现有用户表user和博客表blog,博客是属于某个用户的,而用户会发表多篇博客。
BELONGS_TO:
controller

复制代码 代码如下:
$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框架程序设计有所帮助。

相关文章

  • CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)

    CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)

    这篇文章主要介绍了CI框架封装的常用图像处理方法,涉及针对图像的缩略图、水印、旋转、上传等操作,需要的朋友可以参考下
    2016-11-11
  • php不使用插件导出excel的简单方法

    php不使用插件导出excel的简单方法

    这篇文章主要介绍了php不使用插件导出excel的简单方法,首先获取需要导出的数据的数组,数组的格式在下面。之后就是定义文件名称和需要导出的excel的样式,最后就是循环数组,输出数据了
    2014-03-03
  • Yii2 RESTful中api的使用及开发实例详解

    Yii2 RESTful中api的使用及开发实例详解

    这篇文章主要介绍了Yii2 RESTful中api的使用及开发实例详解的相关资料,需要的朋友可以参考下
    2016-07-07
  • 推荐几个开源的微信开发项目

    推荐几个开源的微信开发项目

    这篇文章主要推荐几个开源的微信开发项目,需要的朋友可以参考下
    2014-12-12
  • FleaPHP框架数据库查询条件($conditions)写法总结

    FleaPHP框架数据库查询条件($conditions)写法总结

    这篇文章主要介绍了FleaPHP框架数据库查询条件($conditions)写法,结合实例形式总结分析了针对$conditions参数为整数,字符串,数组等情况的使用方法及各种查询技巧,需要的朋友可以参考下
    2016-03-03
  • discuz7 phpMysql操作类

    discuz7 phpMysql操作类

    MySql数据库连接类,大家可以看下网上老手们用的什么方法,大家可以直接拿来用,但前提是大家能熟练的掌握的基础上,这样才能有所进步。
    2009-06-06
  • Drupal7中常用的数据库操作实例

    Drupal7中常用的数据库操作实例

    Drupal 7 提供的新功能其中一个就是可以使用 Query Builder and Query Objects 查询生成器来构造查询对象的能力,无需在代码中写原始的SQL语句,一是提高了代码可阅读性,二是兼容所有数据库
    2014-03-03
  • destoon调用自定义模板及样式的公告栏

    destoon调用自定义模板及样式的公告栏

    这篇文章主要介绍了destoon调用自定义模板及样式的公告栏的方法,简单实用,需要的朋友可以参考下
    2014-06-06
  • Laravel 5框架学习之表单

    Laravel 5框架学习之表单

    Laravel 5.0 新引入的表单请求 (Form Request) 特性提供了集规范性 (差不多就是 "最佳实践" 的意思) 和便捷性 (这是比之前任何一种选择都更强大也更便捷的方式) 于一体的, 在 Laravel 中执行数据检查和验证的新手段.
    2015-04-04
  • php实现根据IP地址获取其所在省市的方法

    php实现根据IP地址获取其所在省市的方法

    今天,就讨论一下在PHP中如何获取用户IP地址、PHP根据IP判断用户所在城市以及PHP根据IP实现城市切换或跳转的问题。
    2015-04-04

最新评论