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脚本的10个技巧(6)
Oct 09 PHP
php5 mysql分页实例代码
Apr 10 PHP
字母顺序颠倒而单词顺序不变的php代码
Aug 08 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
Oct 30 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
PHP制作用户注册系统
2015/10/23 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
jQuery的end()方法使用详解
2015/07/15 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
python判断windows系统是32位还是64位的方法
2015/05/11 Python
python实现DES加密解密方法实例详解
2015/06/30 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python实现的发邮件功能示例
2019/09/11 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
手工社团活动方案
2014/02/17 职场文书
文明村创建实施方案
2014/03/27 职场文书
公益广告标语
2014/06/19 职场文书
运动会标语
2014/06/21 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
会计专业自荐信范文
2015/03/05 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
Python各协议下socket黏包问题原理
2022/04/12 Python