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

Laravel 5.5注册用户触发NOT NULL约束违反错误求助

问题分析与解决方案

从你提供的错误信息里能一眼看出关键问题:Laravel的批量赋值保护机制过滤了你传入的address和user_type字段,导致最终执行的SQL语句里根本没有这两个字段的值,数据库自然会触发NOT NULL约束错误。

看你给出的错误SQL:

insert into "users" ("name", "email", "password", "updated_at", "created_at") values (...)

这里完全没有address和user_type的影子,虽然你的dump数据里确实有这两个字段的值,但Laravel的模型自动把它们过滤掉了——原因很简单:你的User模型没有把这两个字段加入到允许批量赋值的列表里。

解决步骤

  1. 打开你的app/User.php模型文件
  2. 找到$fillable属性,把address和user_type添加进去,修改后应该是这样:
class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'address', 'user_type'
    ];

    // ... 其他模型代码
}

为什么这样能解决问题?

Laravel默认启用批量赋值保护,目的是防止恶意用户通过表单提交修改你不想让他们修改的字段(比如approved、id这类)。只有在$fillable数组里明确列出的字段,才能通过create()、fill()这类批量赋值方法被写入数据库。

你之前在RegisterController的create方法里虽然传入了address和user_type,但因为模型没允许这些字段的批量赋值,所以Laravel自动把它们从插入语句里移除了,数据库接收不到这些值,就触发了NOT NULL约束错误。

修改完模型后再尝试注册,你会发现SQL语句里就会包含address和user_type字段,错误也就消失了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:44:30