gpt4 book ai didi

PHP, Yii2 GridView 过滤关系值

转载 作者:IT王子 更新时间:2023-10-29 00:17:13 26 4
gpt4 key购买 nike

继此之后:

Yii2 how does search() in SearchModel work?

我希望能够过滤关系数据的 GridView 列。这就是我的意思:

我有两个表,TableATableB。两者都有使用 Gii 生成的相应模型。 TableA 有一个指向 TableB 中值的外键,如下所示:

TableA
attrA1, attrA2, attrA3, TableB.attrB1

TableB
attrB1, attrB2, attrB3

attrA1和attrB1是对应表的主键。

现在,我有一个 Yii2 GridView attrA2attrA3attrB2。我在 attrA2attrA3 上有一个有效的过滤器,这样我就可以搜索列值。我也对这两列进行了工作排序 - 只需单击列标题即可。我也希望能够在 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 但我不确定如何使用。同样,我也希望能够按此列进行排序 - 就像我可以通过单击标题链接对 attrA2AttrA3 进行排序一样。任何帮助,将不胜感激。谢谢。

最佳答案

这是基于 guide 中的描述. SearchModel 的基本代码来自 Gii 代码生成器。这也假设 $this->TableB 已使用 hasOne()hasMany() 关系设置。看这个doc .

1.设置搜索模型

TableASearch 模型中添加:

public function attributes()
{
// add related fields to searchable attributes
return array_merge(parent::attributes(), ['TableB.attrB1']);
}

public function rules()
{
return [
/* your other rules */
[['TableB.attrB1'], 'safe']
];
}

然后在TableASearch->search()中添加(在$this->load()之前):

$dataProvider->sort->attributes['TableB.attrB1'] = [
'asc' => ['TableB.attrB1' => SORT_ASC],
'desc' => ['TableB.attrB1' => SORT_DESC],
];

$query->joinWith(['TableB']);

然后实际搜索您的数据(在 $this->load() 下方):

$query->andFilterWhere([
'like',
'TableB.attrB1',
$this->getAttribute('TableB.attrB1')
]);

<强>2。配置GridView

添加到您的 View :

echo GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
/* Other columns */
'TableB1.attrB1',
/* Other columns */
]
]);

关于PHP, Yii2 GridView 过滤关系值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21992687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com