当前位置:  开发笔记 > 编程语言 > 正文

Laravel timestamps()不会创建CURRENT_TIMESTAMP

如何解决《Laraveltimestamps()不会创建CURRENT_TIMESTAMP》经验,为你挑选了1个好方法。

我有一个具有该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_atupdated_at0000-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



1> Marcin Nabia..:

当您不使用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

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有