如何在Yii2 GridColumns中添加关联其他模型的文本筛选框
在Yii2中为Wisuda列表的User关联字段添加筛选框
要实现为Wisuda列表中关联的User的nama字段添加文本筛选框,需按以下步骤修改代码:
1. 修改WisudaSearch模型
1.1 添加关联字段属性
在WisudaSearch类中新增用于接收筛选输入的nama属性:
class WisudaSearch extends Wisuda { // 新增关联字段属性 public $nama; // ... 原有代码 }
1.2 更新验证规则
在rules()方法中为nama字段添加安全验证规则:
public function rules() { return [ [['id', 'nim', 'priode_id'], 'integer'], [['created_at', 'updated_at', 'nama'], 'safe'], // 将nama加入安全属性数组 ]; }
1.3 修改search方法,关联User表并添加筛选逻辑
在search()方法中关联User模型,添加模糊筛选条件,同时配置排序支持:
public function search($params) { $query = Wisuda::find(); // 关联User表,确保能访问user表字段 $query->joinWith(['user']); $dataProvider = new ActiveDataProvider([ 'query' => $query, // 配置排序规则,支持按nama字段排序 'sort' => [ 'attributes' => [ 'id', 'nim', 'priode_id', 'nama' => [ 'asc' => ['user.nama' => SORT_ASC], 'desc' => ['user.nama' => SORT_DESC], 'label' => 'Nama', ] ] ] ]); $this->load($params); if (!$this->validate()) { // 可选:验证失败时返回空结果,取消注释下方代码即可 // $query->where('0=1'); return $dataProvider; } // 原有筛选条件 $query->andFilterWhere([ 'id' => $this->id, 'nim' => $this->nim, 'priode_id' => $this->priode_id, 'created_at' => $this->created_at, 'updated_at' => $this->updated_at, ]); // 添加针对user.nama的模糊筛选 $query->andFilterWhere(['like', 'user.nama', $this->nama]); return $dataProvider; }
2. 修改视图中的GridView列配置
确保GridView的nama列正确关联到searchModel的属性,自动生成筛选框:
[ 'attribute' => 'nama', 'label' => 'Nama', 'format' => 'raw', 'value' => function ($model) { if (isset($model->user)) { return $model->user->nama; } return '<span class="label label-warning">Belum Login</span>'; }, // 可选:若Yii未自动生成筛选框,可显式指定样式(需提前引入yii\helpers\Html) // 'filter' => Html::activeTextInput($searchModel, 'nama', ['class' => 'form-control']) ],
完成上述修改后,Wisuda列表页面的Nama列上方会出现文本筛选框,输入内容即可对关联的User的nama字段进行模糊搜索。
内容的提问来源于stack exchange,提问作者Stunggal
相关产品推荐
相关产品推荐

