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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
php实现的RSS生成类实例
Apr 23 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
ThinkPHP 模板引擎使用详解
May 07 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 09 PHP
实例讲解PHP表单验证功能
Feb 15 PHP
php pdo连接数据库操作示例
Nov 18 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 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 sprintf()函数让你的sql操作更安全
2008/07/23 PHP
jQuery登陆判断简单实现代码
2013/04/21 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
js分页代码分享
2014/04/28 Javascript
javascript 数组操作详解
2015/01/29 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
小程序实现搜索框
2020/06/19 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
Django中URLconf和include()的协同工作方法
2015/07/20 Python
python环境下安装opencv库的方法
2020/03/05 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
求职信的要素有哪些呢
2013/12/26 职场文书
销售总经理岗位职责
2014/03/15 职场文书
大学生党员自我评价范文
2014/04/09 职场文书
环保建议书400字
2014/05/14 职场文书
七一建党日演讲稿
2014/09/05 职场文书
个人工作表现评价材料
2014/09/21 职场文书
加强作风建设工作总结
2014/10/23 职场文书
业务员岗位职责
2015/02/03 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
请病假条范文
2015/08/17 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL
vue实现拖拽交换位置
2022/04/07 Vue.js
Golang解析JSON对象
2022/04/30 Golang
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript