2016-09-12 1 views
2

Das ist meine erste Frage, ich hoffe jemand kann mir helfen.Yii2 - Wie man ein verwandtes Modell über eine Pivot-Tabelle filtert

Wie filtert man ein verwandtes Modell (über eine Pivot-Tabelle)?

Ich habe Modell A, Modell A_B und Modell B. A_B ist der Drehpunkt (id, a_id, b_id)

I in einem Grid alle A Instanzen anzeigen und sammle ich leicht B Modell verwendet. Aber völlig unbekannt, wie man diese B Modelle filtert.

Antwort

1

Sie können multi Beziehung verwenden, indem Sie hasMany Beziehung und Filter wie folgt verwenden.

Modell A Datei

namespace app\models; 

use Yii; 

class A extends yii\db\ActiveRecord 
{ 
.... 

function getRelated(){ 
return $this->hasMany(B::className(), ['id' => 'b_id']) 
->viaTable(A_B::tableName(), ['a_id' => 'id']); 
} 
.... 
} 

Während Filterabfrage zu schreiben, fügen Sie diese Beziehung wie unten.

Modell ASeach

namespace app\models; 

use Yii; 

class ASearch extends app\models\A 
{ 
var $title = null; 

public function search($params) { 

$modelA = A::find(); 

$dataProvider = new yii\data\ActiveDataProvider([ 
    'query' => $query, 
]); 

$this->load($params); 

$modelA->joinWith(['related']); //like this you can add more relations 

$modelA->andFilterWhere(['like', 'b_title', $this->title]); 

return $dataProvider; 
} 
} 
+0

Oh große Datei! Genau das brauche ich. Vielen Dank. – Daunio

+0

Froh, meine Lösung hat dir geholfen :) –

Verwandte Themen