迁移时不让-> default()的值可为空

时间:2018-08-01 04:57:23

标签: laravel

我一直在工作,然后尝试在建立此的地方进行迁移:

$table->string('company')->default('None');
$table->string('job')->default('freelancer');

现在,发生的情况是,当我填写表格并提交时,它向我抛出一条错误消息,指出字段不能为NULL

所以我有点困惑,因为据我所知,如果字段为NULL,则应将其保存为迁移的default部分建立的字段。

我如何使其工作?

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

可能是您的模型中缺少$fillable属性:

protected $fillable = ['company','job'];

还要确保您的迁移文件生成正确。转到table,查看默认值是否设置正确。

Laravel mass assignment

答案 1 :(得分:0)

它表示如果在插入数据库时​​没有任何内容传递给此列,则将设置给定的默认值。但是,如果您尝试在此列中插入NULL值,则会引发错误。

如果您想在此列上允许NULL值,则应添加-> nullable()。像这样:

$table->string('company')->nullable()->default('None');

让我们尝试解释更多:

假设您的“ column1”在您的可填充数组中。 当您填充没有column1的模型时。 Laravel将生成类似

的查询
INSERT INTO table_name(column1) VALUES(NULL)

如果您的column1不可为空,则会引发错误。 如果“ column1”不在$ fillable数组中,并且您在不使用“ column1”的情况下填充模型,则laravel生成不包含“ column1”的查询,例如:

INSERT table(othercolumns ... ) VALUEs(....)

未设置Column1,因此MYSQL将在此处设置默认值。