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版)
Jun 08 PHP
php引用传值实例详解学习
Nov 06 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
Aug 11 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
Laravel 自定命令以及生成文件的例子
Oct 23 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
python使用百度翻译进行中翻英示例
2014/04/14 Python
python返回昨天日期的方法
2015/05/13 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
Python中过滤字符串列表的方法
2020/12/22 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
eBay加拿大站:eBay.ca
2019/06/20 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
农民入党思想汇报
2014/01/03 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
国旗下的演讲稿
2014/05/08 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
MySQL派生表联表查询实战过程
2022/03/20 MySQL