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

时间:2015-02-11 17:01:47

标签: php mysql 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获取内容,但我认为它返回的数组不是ActiveQuery而不是content::find()

我基于ContentSearch Model创建了一个新的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

如何处理?

1 个答案:

答案 0 :(得分:0)

使用keyword-> getContents()而不是keyword->内容。完成