これに続いて:
Yii2 SearchModel の search() はどのように機能しますか?
GridView
リレーショナル データの列をフィルター処理できるようにしたいと考えています。これが私が意味することです:
私は2つのテーブルを持っていTableA
ますTableB
. どちらにも、Gii を使用して生成された対応するモデルがあります。次のようTableA
に、 の値への外部キーがあります。TableB
TableA
attrA1, attrA2, attrA3, TableB.attrB1
TableB
attrB1, attrB2, attrB3
attrA1 と attrB1 は、対応するテーブルの主キーです。
今、私は、およびの Yii2 を持っていGridView
ます。列の値を検索できるように、とに機能するフィルターがあります。列ヘッダーをクリックするだけで、これら 2 つの列の並べ替えも実行できます。このフィルタリングとソートも追加できるようにしたいと思います。attrA2
attrA3
attrB2
attrA2
attrA3
attrB2
私のTableASearch
モデルは次のようになります。
public function search($params){
$query = TableA::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$this->addCondition($query, 'attrA2');
$this->addCondition($query, 'attrA2', true);
$this->addCondition($query, 'attrA3');
$this->addCondition($query, 'attrA3', true);
return $dataProvider;
}
私のTableA
モデルでは、関連する値を次のように設定します
public $relationalValue;
public function afterFind(){
$b = TableB::find(['attrB1' => $this->attrB1]);
$this->relationalValue = $b->relationalValue;
}
これはおそらく最善の方法ではありませんが。検索機能のどこかで $relationalValue を使用する必要があると思いますが、方法がわかりません。同様に、この列でもソートできるようにしたいと思います-ヘッダーリンクをクリックしattrA2
てソートできるように. AttrA3
どんな助けでも大歓迎です。ありがとう。