怎么在Yii中使用relations实现数据关联查询
今天就跟大家聊聊有关怎么在Yii中使用relations实现数据关联查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
关联查询,Yii 也支持所谓的统计查询(或聚合查询)。 它指的是检索关联对象的聚合信息,例如每个 post 的评论的数量,每个产品的平均等级等。 统计查询只被 HAS_MANY(例如,一个 post 有很多评论) 或 MANY_MANY (例如,一个 post 属于很多分类和一个 category 有很多 post) 关联对象执行。
执行统计查询非常类似于之前描述的关联查询。我们首先需要在 CActiveRecord 的 relations() 方法中声明统计查询。
classPostextendsCActiveRecord { publicfunctionrelations() { returnarray( '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 的所有审核后的评论。
classUserextendsCActiveRecord { publicfunctionrelations() { returnarray( 'posts'=>array(self::HAS_MANY,'Post','author_id','with'=>'comments:approved'), ); } }
看完上述内容,你们对怎么在Yii中使用relations实现数据关联查询有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。
推荐阅读
-
PHP优秀框架Laravel和Yii大PK
-
怎么在YII Framework中使用filter过滤器
这期内容当中小编将会给大家带来有关怎么在YIIFramework中使用filter过滤器,文章内容丰富且以专业的角度为大家分析和...
-
如何在Yii框架中使用响应组件
这期内容当中小编将会给大家带来有关如何在Yii框架中使用响应组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大...
-
如何在Yii框架中使用函数
本篇文章为大家展示了如何在Yii框架中使用函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收...
-
使用Yii 框架怎么创建一个控制器
这篇文章将为大家详细讲解有关使用Yii框架怎么创建一个控制器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
如何在Yii框架中使用redis命令
如何在Yii框架中使用redis命令?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人...
-
Session与Cookie怎么在Yii框架中使用
Session与Cookie怎么在Yii框架中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过...