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获取某个目录大小的代码
Sep 10 PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
PHP的password_hash()使用实例
Mar 17 PHP
laravel安装和配置教程
Oct 29 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
laravel学习教程之存取器
Jul 30 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 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调用c接口无错版介绍
2014/03/11 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
详解webpack运行Babel教程
2018/06/13 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
简介Django框架中可使用的各类缓存
2015/07/23 Python
Python 多核并行计算的示例代码
2017/11/07 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
用Python实现职工信息管理系统
2020/12/30 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
优秀团员事迹材料1000字
2014/08/20 职场文书
签订劳动合同通知书
2015/04/16 职场文书
新闻稿标题
2015/07/18 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
七年级作文之雪景
2019/11/18 职场文书
MySQL RC事务隔离的实现
2022/03/31 MySQL
Python中request的基本使用解决乱码问题
2022/04/12 Python