我正在通过Laracast基础课程系列学习Laravel 5.1,在第7集中讲到了迁移,我像这样用迁移构建了一张表:
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('body');
$table->timestamps();
$table->timestamp('published_at');
});
}
在第10集中提到,当我通过一个没有“published_at”时间戳字段的表单向数据库添加文章时,这应该不起作用,并且应该抛出一个“Not Null constraint failed”的异常。但是令人难以置信的是,文章被添加到了表中。 当我查看phpmyadmin的表结构中“published_at”列时,它没有选中“null”复选框,所以它不应该接受null?这是真的吗? 但是后来我注意到迁移将“published_at”列的默认值设置为“0000-00-00 00:00:00”。为什么?这会覆盖NULL条件吗? 然后我尝试将默认值设置为“none”,但仍然没有选中null。我再次尝试添加一个没有“published_at”字段的文章,但是仍然会在表中添加一行并将“published_at”值设置为“0000-00-00 00:00:00”。 有什么解释吗?
我正在使用带有“mysql v5.6.17”和“php v5.5.12”的wampserver。
published_at
的文本框,所以当我提交时,查询中会是null
还是空字符串? - osyanpublished_at
不可为空,当你不填写它时,你会得到0000-00-00 00:00:00
,因为你没有设置任何其他默认值。你可以使用->default(DB::raw('CURRENT_TIMESTAMP'))
来设置它,这样当你不填写它时,你将默认获得当前日期和时间,而不是零。 - Marcin Nabiałek