我正在使用Laravel Framework version 5.2.7
。我创建了一个数据库迁移,如下所示:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateLessonsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('lessons', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('body');
$table->boolean('some_bool');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('lessons');
}
}
我进入了虚拟机的MySql数据库并使用了命令desc lessons;
,这就是我得到的:
我不明白为什么created_at
和updated_at
列的NULL
为Default
。
我去了Laravel 5.2文档并看到了这个:
$table->timestamps(); Adds created_at and updated_at columns.
$table->nullableTimestamps(); Same as timestamps(), except allows NULLs.
因此,根据文档$table->timestamps();
,不应允许NULL
为Default
。但我仍然得到created_at
和updated_at
列,NULL
为Default
。我糊涂了。请帮助!!
答案 0 :(得分:3)
如果您在架构构建器中使用$table->timestamp('created_at')
而不是$table-timestamps()
,则默认值为CURRENT_TIMESTAMP
,并且它不会是NULL
。
同样存储记录的更新时间:
$table->timestamp('updated_at')
。
不同之处仅在于一个字母&#39; ,并且必须提及列名称,例如created_at
/ created
,{{1} } / updated_at
。
答案 1 :(得分:1)
不确定这是否正在回答问题,但......
默认的timestamp
方法(至少在Laravel 5.4中)输出以下SQL:
`my_new_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
您正在寻找的是什么。如果您将timestamp
列设置为nullable
,则默认值为NULL
,并且允许为空。
所以:
$table->timestamp('my_new_timestamp')->nullable();
将提供以下SQL:
`my_new_timestamp` timestamp NULL DEFAULT NULL
答案 2 :(得分:0)
如您在NULL
列中所见,它不允许Null
,它们都设置为NO
答案 3 :(得分:0)
请注意,因为默认情况下,Laravel 5.2.14的时间戳被设置为可空。
Blueprint.php:
/**
* Add nullable creation and update timestamps to the table.
*
* @param int $precision
* @return void
*/
public function timestamps($precision = 0)
{
$this->timestamp('created_at', $precision)->nullable();
$this->timestamp('updated_at', $precision)->nullable();
}
有关此问题的讨论可以在Github上阅读。
Taylor Otwell:我个人认为-> timestamps()应该默认为-> nullableTimestamps()来解决此问题。
摘自Github问题https://github.com/laravel/framework/issues/12060#issuecomment-179249086
更改提交:默认使时间戳为空 https://github.com/laravel/framework/commit/720a116897a4cc6780fa22f34d30c5986eafc581