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格式化工具Beautify PHP小小BUG
Apr 24 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
php汉字转拼音的示例
Feb 27 PHP
php中随机函数mt_rand()与rand()性能对比分析
Dec 01 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 PHP
PHP实现简单日历类编写
Aug 28 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
php定时执行任务设置详解
2015/02/06 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
php语法检查的方法总结
2019/01/21 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
ansible作为python模块库使用的方法实例
2017/01/17 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
Win8下python3.5.1安装教程
2020/07/29 Python
python与字符编码问题
2019/05/24 Python
使用python list 查找所有匹配元素的位置实例
2019/06/11 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
用python发送微信消息
2020/12/21 Python
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
C面试题
2015/10/08 面试题
办公室文秘自我评价
2013/09/21 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
公司委托书格式范本
2014/09/16 职场文书
学校团代会开幕词
2016/03/04 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
关于golang高并发的实现与注意事项说明
2021/05/08 Golang