Yii中的relations数据关联查询及统计功能用法详解


Posted in PHP onJuly 14, 2016

本文实例讲述了Yii中的relations数据关联查询及统计功能用法。分享给大家供大家参考,具体如下:

关联查询,Yii 也支持所谓的统计查询(或聚合查询)。 它指的是检索关联对象的聚合信息,例如每个 post 的评论的数量,每个产品的平均等级等。 统计查询只被 HAS_MANY(例如,一个 post 有很多评论) 或 MANY_MANY (例如,一个 post 属于很多分类和一个 category 有很多 post) 关联对象执行。

执行统计查询非常类似于之前描述的关联查询。我们首先需要在 CActiveRecord 的 relations() 方法中声明统计查询。

class Post extends CActiveRecord
{
  public function relations()
  {
    return array(
      'commentCount'=>array(self::STAT, 'Comment', 'post_id'),
      'categoryCount'=>array(self::STAT, 'Category', 'post_category(post_id,category_id)'),
    );
  }
}

关联查询命名空间

关联查询也可以和 命名空间一起执行。有两种形式。第一种形式,命名空间被应用到主模型。第二种形式,命名空间被应用到关联模型。

下面的代码展示了如何应用命名空间到主模型。

$posts=Post::model()->published()->recently()->with('comments')->findAll();

这非常类似于非关联的查询。唯一的不同是我们在命名空间后使用了 with() 调用。 此查询应当返回最近发布的 post和它们的评论。

下面的代码展示了如何应用命名空间到关联模型。

$posts=Post::model()->with('comments:recently:approved')->findAll();

上面的查询将返回所有的 post 及它们审核后的评论。注意 comments 指的是关联名字,而 recently 和 approved 指的是 在 Comment 模型类中声明的命名空间。关联名字和命名空间应当由冒号分隔。

命名空间也可以在 CActiveRecord::relations() 中声明的关联规则的 with 选项中指定。在下面的例子中, 若我们访问 $user->posts,它将返回此post 的所有审核后的评论。

class User extends CActiveRecord
{
  public function relations()
  {
    return array(
      'posts'=>array(self::HAS_MANY, 'Post', 'author_id', 'with'=>'comments:approved'),
    );
  }
}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php 三维饼图的实现代码
Sep 28 PHP
PHP无敌近乎加密方式!
Jul 17 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
Feb 16 PHP
简单的php中文转拼音的实现代码
Feb 11 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 #PHP
Yii实现Command任务处理的方法详解
Jul 14 #PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 #PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
Jul 14 #PHP
Yii实现的多级联动下拉菜单
Jul 13 #PHP
YII视图整合kindeditor扩展的方法
Jul 13 #PHP
Yii+upload实现AJAX上传图片的方法
Jul 13 #PHP
You might like
浅谈PHP的反射机制
2016/12/15 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
python使用RNN实现文本分类
2018/05/24 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Python wordcloud库安装方法总结
2020/12/31 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
前台文员岗位职责
2013/12/28 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
公司新年寄语
2014/04/04 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
解除施工合同协议书
2014/10/17 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
未婚证明范本
2015/06/15 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书