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模型没有把这两个字段加入到允许批量赋值的列表里。
解决步骤
- 打开你的
app/User.php模型文件 - 找到
$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
相关产品推荐
相关产品推荐

