2016-10-27 5 views
0

私はGii AJAX Crudジェネレータを使用しましたが、私は自分の愚かさによって壁を押し上げています。私はYii 2を使用しており、グリッドビューを使用して接合テーブルのITSELFとの関係を持つテーブルで、多対多で検索したいと考えています。Yii2セルフフィルターグリッド表示(属性なし)

table tag (id, name). 

table tag_child (parent_id, child_id) 


Class Tag 
... 
public function getParents() 
{ 
    return $this->hasMany(self::className(), ['id' => 'child_id']) 
     ->viaTable('tag_child', ['parent_id' => 'id']); 
} 

public function getChildren() 
{ 
    return $this->hasMany(self::className(), ['id' => 'parent_id']) 
     ->viaTable('tag_child', ['child_id' => 'id']); 
} 

そして、私のグリッドビュー/列に:

[ 
    'class' => '\kartik\grid\DataColumn', 
    'attribute'=>'name', 
], 
[ 
    'class' => '\kartik\grid\DataColumn', 
    'label' => 'Tag Type', 
    'value' => function($tag) { 
     return $tag->displayTagTypes(); 
    }, 
    'attribute' => 'tagTypes' 
], 


TagQuery.php 
... 
public $tagTypes; 
     public function search($params) 
{ 
    $query = Tag::find(); 

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

    $this->load($params); 

    if (!$this->validate()) { 
     // $query->where('0=1'); 
     return $dataProvider; 
    } 

    $query->joinWith('parents p'); 

    $query->andFilterWhere(['id' => $this->id]); 

    $query->andFilterWhere(['like', 'tag.name', $this->name]); 

    return $dataProvider; 
} 

私はその値関数と私のインデックステーブルに結果を表示することができるよ、私のタグフィルターで検索することができませんby tagTypesどのように私はそれを設定するのですか?

例として、それほど多くない場合、私の属性を 'joinedTableName.value'に設定すると、$ query-> orFilterWhere( 'like'、 'parent.name '、$ this-> id)または何でも。しかし、私は今失っています...

答えて

1

コントローラで$ searchModel = new TagQuery()を宣言してから、$ searchModelをビューに渡し、GridViewオプションに 'filterModel' => $ searchModel 。

いずれか、または各列に対して特定のfilterTypesとフィルタロジックを使用して実際にカスタムフィルタを実行できます。

クエリモデルでpublic tagTypeを宣言しますが、何もしません。 $ query-> andFilterWhere(['like'、 'tag.name'、$ this-> tagType]);

関連する問題