接着上面的问题:
Yii2中SearchModel中的search()方法是如何工作的?
我希望能够过滤一个关联数据列的GridView
。具体来说:
我有两个表,TableA
和TableB
。两个表都使用Gii生成了对应的模型。 TableA
有一个外键指向TableB
的一个值,就像这样:
TableA
attrA1, attrA2, attrA3, TableB.attrB1
TableB
attrB1, attrB2, attrB3
attrA1和attrB1是它们对应表格的主键。
现在我有一个Yii2的GridView
,包括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
做到的那样。任何帮助将不胜感激。谢谢。