私は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)または何でも。しかし、私は今失っています...