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

Yii2 GridView filterModel报错“必须为整数”,需按用户名搜索

解决GridView按关联表用户名筛选的问题

哈哈,这个问题我之前在项目里也踩过坑!本质是你的GridView默认基于Holidays表的person_id(整数类型)做筛选,但你实际想要用关联表Persons里的用户名来搜索,所以得调整模型关联和搜索逻辑,一步步来:

第一步:确保模型关联正确

先在Holidays.php模型里添加和Persons的关联关系(如果还没加的话):

public function getPerson()
{
    // 一个Holiday对应一个Person,所以用hasOne
    return $this->hasOne(Persons::class, ['person_id' => 'person_id']);
}

第二步:修改搜索模型支持用户名筛选

假设你的搜索模型是SearchHolidays.php,做这几个修改:

  1. 新增一个用于接收用户名筛选的属性:
public $person_name;
  1. 在验证规则里允许这个属性作为筛选条件:
public function rules()
{
    return [
        // 保留你原有的其他规则
        [['person_name'], 'safe'], // 标记为安全的筛选属性
    ];
}
  1. 更新search()方法,关联Persons表并添加用户名筛选逻辑:
public function search($params)
{
    $query = Holidays::find();
    // 关联Persons表,这样才能用它的字段筛选和显示
    $query->joinWith(['person']);

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    // 可选:配置排序,让点击表头可以按用户名排序
    $dataProvider->sort->attributes['person_name'] = [
        'asc' => ['Persons.person_name' => SORT_ASC],
        'desc' => ['Persons.person_name' => SORT_DESC],
    ];

    $this->load($params);

    if (!$this->validate()) {
        return $dataProvider;
    }

    // 保留你原有的其他筛选条件...

    // 添加用户名的模糊筛选
    $query->andFilterWhere(['like', 'Persons.person_name', $this->person_name]);

    return $dataProvider;
}

第三步:调整GridView的列配置

把原来显示person_id的列替换成关联的用户名列,并且绑定到新的筛选属性:

echo GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        // 保留你的其他列...
        [
            'attribute' => 'person_name', // 绑定到搜索模型里的person_name属性
            'label' => '用户名',
            'value' => function ($model) {
                // 从关联模型里取用户名
                return $model->person->person_name;
            },
        ],
        // 保留你的其他列...
    ],
]);

这样改完之后,GridView里的列会正常显示用户名,筛选框也会按用户名的字符串做模糊搜索,不会再出现“Persons must be an integer”的错误啦。

哦对了,如果你的框架不是Yii2,核心思路也是通用的:让搜索逻辑关联到关联表,添加关联表字段的筛选条件,同时修改列表的列配置,绑定到关联字段的筛选属性。

内容的提问来源于stack exchange,提问作者Roby Sottini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:01:38