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
相关产品推荐
相关产品推荐

