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中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
三个类概括PHP的五种设计模式
Sep 05 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
php mail to 配置详解
Jan 16 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php实现的支持断点续传的文件下载类
Sep 23 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
php延迟静态绑定实例分析
Feb 08 PHP
php 浮点数比较方法详解
May 05 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
来自PHP.NET的入门教程
2006/10/09 PHP
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
js取float型小数点后两位数的方法
2014/01/18 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
理解AngularJs指令
2015/12/10 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
Python isinstance函数介绍
2015/04/14 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
什么是python的自省
2020/06/21 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
就业推荐自我鉴定
2013/10/06 职场文书
平民服装店创业计划书
2014/01/17 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
工作保证书范文
2014/04/29 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
好人好事新闻稿
2015/07/17 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript