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 和 MySQL 基础教程(二)
Oct 09 PHP
PHP 和 MySQL 基础教程(三)
Oct 09 PHP
PHP+DBM的同学录程序(5)
Oct 09 PHP
php 地区分类排序算法
Jul 01 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
Apr 27 PHP
PHP开发Apache服务器配置
Jul 15 PHP
php开发时容易忘记的一些技术细节
Feb 03 PHP
详解PHP实现定时任务的五种方法
Jul 25 PHP
PHP中STDCLASS用法实例分析
Nov 11 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 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-fpm的配置详解
2013/06/03 PHP
php实现查询百度google收录情况(示例代码)
2013/08/02 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
nodejs win7下安装方法
2012/05/24 NodeJs
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
python学习之编写查询ip程序
2016/02/27 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
Gap工厂店:Gap Factory
2017/11/02 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
医生辞职信范文
2015/03/02 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
python 多态 协议 鸭子类型详解
2021/11/27 Python
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL