You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:24:52