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批量缩放图片的代码[ini参数控制]
Feb 11 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
PHP实现的简易版图片相似度比较
Jan 07 PHP
php数组使用规则分析
Feb 27 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
php中对象引用和复制实例分析
Aug 14 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
万能的php分页类
2017/07/06 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
python 网络编程常用代码段
2016/08/28 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
Python-split()函数实例用法讲解
2020/12/18 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
市场部规章制度
2014/01/24 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
介绍信的格式
2015/01/30 职场文书
绵山导游词
2015/02/05 职场文书
反邪教教育心得体会
2016/01/15 职场文书
课改心得体会范文
2016/01/25 职场文书
导游词之太湖
2019/10/08 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers