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 相关文章推荐
基于mysql的bbs设计(四)
Oct 09 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
PHP 文件上传全攻略
Apr 28 PHP
PHP中Date()时间日期函数的使用方法小结
Apr 20 PHP
UCenter 批量添加用户的php代码
Jul 17 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
PHP速成大法
Jan 30 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP简单获取多个checkbox值的方法
Jun 13 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
php中bind_param()函数用法分析
Mar 28 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 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 中使用随机数的三个步骤
2006/10/09 PHP
深入分析php之面向对象
2013/05/15 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
Python 功能和特点(新手必学)
2015/12/30 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
基于python3实现倒叙字符串
2020/02/18 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
员工年终演讲稿
2014/01/03 职场文书
大学生简短的自我评价
2014/09/12 职场文书
2015年电教工作总结
2015/05/26 职场文书
车间安全生产管理制度
2015/08/06 职场文书
大学新生入学感想
2015/08/07 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
SQL SERVER触发器详解
2022/02/24 SQL Server