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 PDO中文乱码解决办法
Jul 20 PHP
php 格式化数字的时候注意数字的范围
Apr 13 PHP
浅析php header 跳转
Jun 17 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
PHP四种基本排序算法示例
Apr 09 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 PHP
SAE实时日志接口SDK用法示例
Oct 09 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 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
PHPMailer邮件发送的实现代码
2013/05/04 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
python决策树之CART分类回归树详解
2017/12/20 Python
python 判断网络连通的实现方法
2018/04/22 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
python 录制系统声音的示例
2020/12/21 Python
应届生会计电算化求职信
2013/10/03 职场文书
售后专员岗位职责
2013/12/08 职场文书
应聘编辑职位自荐信范文
2014/01/05 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
转变工作作风心得体会
2016/01/23 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
React如何创建组件
2021/06/27 Javascript
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
Python装饰器详细介绍
2022/03/25 Python
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android