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中使用PDF文档功能
Oct 09 PHP
php桌面中心(二) 数据库写入
Mar 11 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
php中array_multisort对多维数组排序的方法
Jun 21 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
基于php编程规范(详解)
Aug 17 PHP
PHP匿名函数(闭包函数)详解
Mar 22 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 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
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
php格式化时间戳
2016/12/17 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
JS的反射问题
2010/04/07 Javascript
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
Javascript复制实例详解
2016/01/28 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
python读取几个G的csv文件方法
2019/01/07 Python
python区分不同数据类型的方法
2019/10/14 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
2014年高三毕业生自我评价
2014/01/11 职场文书
公司营业员的自我评价
2014/03/04 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
婚宴父母致辞
2015/07/27 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle