我使用MySQL中的连接表建立了多到多个关系。表项目通过表Article_Activity与活动相关。在模型文章中,我有这样的关系设置
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中显示所有相关记录?
发布于 2016-11-25 00:45:14
你可以这样称呼它:
$dataProvider = new ActiveDataProvider([
'query' => $article->getActivities(),
]);如果直接调用get方法,就会得到一个yii\db\ActiveQueryInterface,这就是您需要作为query提供给ActiveDataProvider的内容。
当您像activities一样调用$article->activities属性时,将执行ActiveQueryInterface,并从查询结果中获取记录。
发布于 2016-11-24 16:04:28
基于您的文章模型,您拥有与您相关的多个活动的活动关系。
一种正常的dataProvider
$dataProvider = new ActiveDataProvider([
'query' => Article::find()->joinWith(['activities'])->
where(['your_column'=> $your_value]),
]);返回带有相关活动的activeRecord
您可以参考dataProvider中的相关模型
$models = $dataProvider->models; // this is a collection of model related to the dataProvider query
// so the firts model is $model=models[0] 然后,每一种情况下,你都可以获得腺泡。
$activities = $model->activities;或价值
$my_activity_field = $model->activities->my_activity_fieldhttps://stackoverflow.com/questions/40789892
复制相似问题