如何在yii2中将多对多关系查询结果放到网格视图中


how to put many to many relation query result to grid view in yii2?

我正在使用yii2开发一个内容标记系统。

我有一个Content(PK:id)表,一个Tag(PK:id)表,还有一个名为Content_Tag(PK:Content_id,Tag_id)的连接表。

现在,我想在关键字视图页面的网格视图中显示所有具有相同关键字的内容(可排序,可搜索,就像内容索引页面一样)。

我在关键字Class中使用via,根据以下文档:

 /**
 * @return 'yii'db'ActiveQuery
 */
public function getContent() 
{
    return $this->hasMany(Content_Tag::className(), ['content_id' => 'id']);
}
/**
 * @return 'yii'db'ActiveQuery
 */
public function getContents()
{
    return $this->hasMany(Tag::className(), ['tag_id' => 'tag_id'])->viaTable('content_tag', ['content_id' => 'id']);
}

虽然我可以使用keyword->contents获取内容,但我认为它以数组的形式返回,而不是像content::find()那样返回ActiveQuery

我在ContentSearch模型的基础上创建了一个新的KeywordContentSearch模型:

//$query = Content::find();
$query = Keyword::findOne($params['keyword_id'])->contents;

并在动作视图中修改控制器

public function actionView($id)
{
    $searchModel = new KeywordContentSearch();
    $dataProvider = $searchModel->search([Yii::$app->request->queryParams, 'keyword_id'=>$id]);
    return $this->render('index', [
        'model' => $this->findModel($id),
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

现在错误日志显示非对象中搜索模型中的$query

如何处理?

使用关键字->getContents()而不是关键字->contents。完成