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

Laravel中数组字段非空但存入数据库为NULL问题求助

解决Laravel中User::create()存入username为NULL的问题

这种情况我之前踩过一模一样的坑,大概率是Laravel的模型批量赋值安全限制在搞鬼!下面给你一步步排查解决:

1. 优先检查User模型的$fillable属性

Laravel默认会保护模型的批量赋值操作,只有在$fillable数组里声明的字段,才能通过create()或update()这类批量赋值方法写入数据库。如果你的username没在这个数组里,就算你在create()里明确传了值,框架也会直接忽略它,最终数据库里就会存成NULL。

打开你的app/Models/User.php,确认$fillable里包含username:

class User extends Model
{
    use HasFactory, Notifiable;

    /**
     * 可以被批量赋值的属性
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'username', // 必须添加这个字段!
        'email',
        'password',
    ];

    // ... 其他代码
}

2. 二次确认数据传递的完整性

虽然你说$data['username']的值是ardyfeb2402,可以在User::create()之前临时加一行代码验证:

dd($data['username']); // 打印username的值,确认确实传递到了这一步
User::create([ 
    'name' => $data['name'],
    'username' => $data['username'],
    'email' => $data['email'],
    'password' => Hash::make($data['password']), 
]);

如果这里能正确输出ardyfeb2402,那基本可以锁定是模型$fillable的问题。

3. 核对数据库表结构(可选补充)

检查你的users表,确保username字段:

  • 没有被设置为允许NULL(当然如果是fillable的问题,就算允许NULL也会存值,这条是兜底排查)
  • 字段类型是varchar且长度足够(比如varchar(255))

总结

90%以上的概率是User模型没把username加入$fillable数组,先去修改模型,应该就能解决问题了!

内容的提问来源于stack exchange,提问作者Ardy Febriansyah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:10:57