首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ActiveDataProvider中基于ActiveRecord关系创建Yii2

问在ActiveDataProvider中基于ActiveRecord关系创建Yii2
EN

Stack Overflow用户
提问于 2016-11-24 15:20:41
回答 2查看 2K关注 0票数 1

我使用MySQL中的连接表建立了多到多个关系。表项目通过表Article_Activity与活动相关。在模型文章中,我有这样的关系设置

代码语言:javascript
复制
public function getActivities()
{
    return $this->hasMany(Activity::className(), ['id' => 'activity_id'])
        ->viaTable('article_activity', ['article_id' => 'id']);
}

在为一篇文章提供视图时,我希望显示与该条相关的所有活动的GridView。大多数人的方式似乎是创建一个ActiveDataProvider并在其中插入一个查询,该查询获取相关数据,但这感觉有些多余,因为我在模型中设置了关系,应该有一种方法可以从中获取数据提供者。

我的问题是:是否有一种基于实例化模型关系的yii\data\ActiveDataProvider或yii\db\查询,该关系可用于在GridView中显示所有相关记录?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-25 00:45:14

你可以这样称呼它:

代码语言:javascript
复制
$dataProvider = new ActiveDataProvider([
    'query' => $article->getActivities(),
]);

如果直接调用get方法,就会得到一个yii\db\ActiveQueryInterface,这就是您需要作为query提供给ActiveDataProvider的内容。

当您像activities一样调用$article->activities属性时,将执行ActiveQueryInterface,并从查询结果中获取记录。

票数 3
EN

Stack Overflow用户

发布于 2016-11-24 16:04:28

基于您的文章模型,您拥有与您相关的多个活动的活动关系。

一种正常的dataProvider

代码语言:javascript
复制
  $dataProvider = new ActiveDataProvider([
      'query' => Article::find()->joinWith(['activities'])->
              where(['your_column'=> $your_value]),
  ]);

返回带有相关活动的activeRecord

您可以参考dataProvider中的相关模型

代码语言:javascript
复制
$models = $dataProvider->models; // this is a collection of model related to the dataProvider  query 
                                 // so the firts model is  $model=models[0] 

然后,每一种情况下,你都可以获得腺泡。

代码语言:javascript
复制
 $activities = $model->activities;

或价值

代码语言:javascript
复制
 $my_activity_field = $model->activities->my_activity_field
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40789892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档