访问Yii2中的数据

时间:2016-06-10 10:44:47

标签: php mysql yii2 relation

我是Yii2框架的新手,我现在正尝试使用关系访问Listview中的数据。有人可以解释为什么我的代码不起作用。 我想找一个属于文档的标签。

以下是我的数据库的屏幕截图: enter image description here

这是我的关系:

public function getTags() {
    return $this->hasMany(Tag::className(), ['id' => 'tag_id'])
                    ->viaTable('tbl_document_tag', ['document_id' => 'id']);
}

这是我的控制器:

    public function actionTag() {
     $model = new Search();
     $tag = Yii::$app->getRequest()->getQueryParam('tag');

    //Documents
    $documentModel = new Document;
    $documentSearch = $model->searchDocumentsByTag($documentModel, $tag);

    return $this->render('results', [
        'model' => $model,
        'documentSearch' => $documentSearch,
        'documentModel' => $documentModel
    ]);
}

以下是我的观点:

    public function searchDocumentsByTag($documentsModel, $keyword) {
    $query = Document::find()
            ->with('tags')
            ->andFilterWhere([
        'or',
        ['like', 'tags.state', 1],
        ['like', 'tags.slug', $keyword],
    ]);

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
    return $dataProvider;

我收到以下错误:

  

数据库异常 - yii \ db \ Exception

     

SQLSTATE [42S22]:未找到列:1054未知列' tags.state'在' where子句'   正在执行的SQL是:SELECT COUNT(*)FROM tbl_document WHERE(tagsstate LIKE'%1%')OR(tagsslug喜欢'%steekwoord%')   错误信息:数组   (       [0] => 42S22       1 => 1054       [2] =>未知栏' tags.state'在' where子句'   )   ↵   引起:PDOException

     

SQLSTATE [42S22]:未找到列:1054未知列' tags.state'在' where子句'

1 个答案:

答案 0 :(得分:1)

您只需使用joinWith()代替with()

  

此方法允许您重用现有关系定义来执行JOIN查询。 [...]请注意,由于将执行JOIN查询,因此您有责任消除列名称的歧义。

e.g。 :

$query = Document::find()
    ->joinWith('tags tags')
    ->andFilterWhere([
        'or',
        ['like', 'tags.state', 1],
        ['like', 'tags.slug', $keyword],
    ]);