好的,我正在尝试使用Laravel 5.2迁移制作一些简单的数据库模式。 它们现在非常基本。问题是创建的结果表没有在mysql中反映出我在架构构建器中指定的内容。 例如: 创建下表(忽略表后的图片):
我很确定如果我想允许空值,我应该使用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/',
]);
答案 0 :(得分:3)
从Laravel 5.2开始,实际上是Schema Builder的timestamps
方法creates nullable timestamp columns。 nullableTimestamps
方法只是一个同义词,它更明确地说明了时间戳的创建方式,而且内部的所有内容都是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}因为只有在更新或软删除时才会获得分配的值。