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

单选按钮传递错误值:无论选择何值仅存入admin

排查单选按钮始终存入admin值的问题

我来帮你梳理下这个问题的排查线索,毕竟明明选了operator却只存入admin,大概率是前端交互、模型配置或者数据库设置的问题,咱们一步步来:

1. 先确认前端实际提交的level值到底是什么

在你的store控制器方法最开头,先加一行代码打印请求里的level参数,看看实际提交的内容:

public function store(Request $request) {
    // 打印level值,确认提交的内容
    dd($request->input('level'));
    $data = $request->all();
    // ... 后续代码
}

如果打印出来的是admin,那问题肯定在前端;如果是operator,那问题就出在后端的模型或者数据库配置上。

2. 检查Semantic UI单选按钮的初始化

你用了Semantic UI的ui radio checkbox组件,这类组件需要通过JS初始化才能正常切换选中状态。如果没初始化,你点击operator的时候,浏览器原生的单选按钮checked属性根本没变化,还是默认选中第一个admin选项。

确保你的页面里有这段初始化代码(放在页面底部或者DOM加载完成的事件里):

$('.ui.radio.checkbox').checkbox();

3. 修正Laravel Collective表单组件的选中状态绑定

你的Blade代码里,Form::radio没有绑定旧值或者选中状态,哪怕前端正常工作,当验证失败回显表单时,也可能默认选中第一个选项。应该给每个单选按钮加上第三个参数,用来判断是否选中:

{{-- Administrator选项 --}}
{{ Form::radio('level', 'admin', old('level') === 'admin') }}

{{-- Operator选项 --}}
{{ Form::radio('level', 'operator', old('level') === 'operator') }}

这样无论是首次加载还是验证失败回显,都能正确对应选中的选项。

4. 检查User模型的批量赋值权限

Laravel的批量创建(User::create($data))需要模型里的$fillable数组包含level字段,否则这个字段会被忽略,数据库就会存入字段的默认值(如果默认是admin的话)。

打开你的User模型,确认$fillable里有level:

class User extends Model
{
    protected $fillable = [
        'name', 'email', 'password', 'level', // 必须包含level
    ];
}

5. 检查数据库表的level字段默认值

最后,看看users表的level字段有没有设置默认值为admin。如果前面的步骤都没问题,但数据库还是存admin,很可能是字段默认值在兜底。你可以通过数据库管理工具(比如phpMyAdmin)或者迁移文件查看:

// 示例迁移代码,检查default值
$table->enum('level', ['admin', 'operator'])->default('admin');

如果有这个default('admin'),当请求没有正确传递level值时,就会自动存入admin。


内容的提问来源于stack exchange,提问作者Yudy Ananda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:34:18