Laravel 5.2时间戳

时间:2016-02-16 21:05:04

标签: php mysql laravel laravel-5

好的,我正在尝试使用Laravel 5.2迁移制作一些简单的数据库模式。 它们现在非常基本。问题是创建的结果表没有在mysql中反映出我在架构构建器中指定的内容。 例如:enter image description here 创建下表(忽略表后的图片): enter image description here

我很确定如果我想允许空值,我应该使用nullableTimestampts()也没有默认值,也没有“on update CURRENT TIMESTAMP”等。

我在这里缺少什么? aritsan命令非常简单:

php artisan make:migration create_table_institutes --create=institutes
php artisan migrate

我在Ubuntu 14.04,php7,Apache mysql上 这是我的播种代码:

DB::table('institutes')->insert([
    'name' => 'Ncbi',
    'base_curl' => 'eutils.ncbi.nlm.nih.gov/entrez/eutils/',
]);

1 个答案:

答案 0 :(得分:3)

从Laravel 5.2开始,实际上是Schema Builder的timestamps方法creates nullable timestamp columnsnullableTimestamps方法只是一个同义词,它更明确地说明了时间戳的创建方式,而且内部的所有内容都是call the timestamps method

因此,如果您需要非nullable的时间戳字段,则需要手动创建它们。此外,对于由MySQL当前时间戳自动填充的created_at列,它需要一个默认值。所以这个:

$table->timestamps();

应该替换为:

$table->dateTime('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->dateTime('updated_at')->nullable();

对于MySQL 5.6.5之前版本DATETIME列不能具有默认值的版本,可以使用TIMESTAMP列代替:

$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));

虽然,如果您使用的是Eloquent,除了在创建模型条目时始终填充的created_at列之外,其他列为{{1}因为只有在更新或软删除时才会获得分配的值。