我有一个具有该timestamps()
方法的迁移,然后我有一个种子来播种该表.
Schema::create('mytable', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->timestamps(); });
种子看起来像这样:
DB::table('mytable')->insert([ [ 'title' => 'My Awesome Title' ] ]);
当它全部运行时使用:
php artisan migrate:refresh --seed
该项目被插入,但值created_at
和updated_at
都0000-00-00 00:00:00
那他们为什么不正确?
这是它创建的列方案:
`created_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', `updated_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
我想要这些方案:
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
Marcin Nabia.. 27
当您不使用Eloquent插入数据时,您需要自己插入时间戳.
如果您使用:
$x = new MyTable(); $x->title = 'My Awesome Title'; $x->save();
你将正确填写时间戳(当然你需要先创建MyTable
模型)
编辑
如果你真的想要它,你可以改变:
$table->timestamps();
成:
$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP')); $table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
如果你为这个表创建模型,你应该设置
$timestamps = false;
确保Eloquent不会试图将它们设置在路上.
EDIT2
还有一个更重要的问题.如果你在PHP和MySQL中的其他表格中混合设置日期,你应该确保PHP和MySQL都有完全相同的日期时间(和时区),或者你应该使用与你在记录中设置相同的日期比较(MySQL)或PHP).否则,在运行查询时,您可能会收到意外结果
SELECT * FROM mytable WHERE DATE(created_at) = CURDATE()
可能与通过PHP日期运行查询不同
"SELECT * FROM mytable WHERE DATE(created_at) = '".date('Y-m-d")."'"
因为在PHP服务器上它可能是2015-12-29,但在MySQL服务器上2015-12-30
当您不使用Eloquent插入数据时,您需要自己插入时间戳.
如果您使用:
$x = new MyTable(); $x->title = 'My Awesome Title'; $x->save();
你将正确填写时间戳(当然你需要先创建MyTable
模型)
编辑
如果你真的想要它,你可以改变:
$table->timestamps();
成:
$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP')); $table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
如果你为这个表创建模型,你应该设置
$timestamps = false;
确保Eloquent不会试图将它们设置在路上.
EDIT2
还有一个更重要的问题.如果你在PHP和MySQL中的其他表格中混合设置日期,你应该确保PHP和MySQL都有完全相同的日期时间(和时区),或者你应该使用与你在记录中设置相同的日期比较(MySQL)或PHP).否则,在运行查询时,您可能会收到意外结果
SELECT * FROM mytable WHERE DATE(created_at) = CURDATE()
可能与通过PHP日期运行查询不同
"SELECT * FROM mytable WHERE DATE(created_at) = '".date('Y-m-d")."'"
因为在PHP服务器上它可能是2015-12-29,但在MySQL服务器上2015-12-30