我正在使用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的形式返回。

我基于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,
    ]);
}


现在错误日志在非对象的搜索模型中显示content::find()

怎么处理呢?

最佳答案

使用关键字-> getContents()代替关键字->内容。做完了

关于php - 如何将多对多关系查询结果放入yii2中的网格 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28460102/

10-09 20:23