2016-06-10 6 views
1

Ich bin neu im Yii2-Framework und versuche jetzt, Daten in Listview unter Verwendung von Relationen aufzurufen. Kann jemand bitte erklären, warum mein Code nicht funktioniert? Ich möchte ein Tag finden, das zu einem Dokument gehört. HierZugriff auf Daten in Yii2

ist ein Screenshot von meiner Datenbank: enter image description here

Hier meine Beziehung ist:

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

Hier ist mein Controller:

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 
    ]); 
} 

Hier ist meine Ansicht:

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; 

bekomme ich folgende Fehlermeldung:

This method allows you to reuse existing relation definitions to perform JOIN queries. [...] Note that because a JOIN query will be performed, you are responsible to disambiguate column names.

zum Beispiel:

Database Exception – yii\db\Exception

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tags.state' in 'where clause' The SQL being executed was: SELECT COUNT(*) FROM tbl_document WHERE (tags . state LIKE '%1%') OR (tags . slug LIKE '%steekwoord%') Error Info: Array ( [0] => 42S22 1 => 1054 [2] => Unknown column 'tags.state' in 'where clause' ) ↵ Caused by: PDOException

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tags.state' in 'where clause'

+2

Wie funktioniert Ihr Code nicht? Welche Fehler erhalten Sie? Sie müssen beschreiben, welches Ergebnis Sie versuchen zu erreichen – mikeyq6

+0

versuchen Sie es wie '['Like', 'tbl_tag.state', 1], ['Like', 'tbl_tag.slug', $ Schlüsselwort]' – vishuB

Antwort

1

Sie einfach joinWith() statt with() verwenden sollten :

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

Danke, es ist arbeitet jetzt :) –