gpt4 book ai didi

php - Laravel timestamps() 不会创建 CURRENT_TIMESTAMP

转载 作者:行者123 更新时间:2023-12-02 11:59:16 25 4
gpt4 key购买 nike

我有一个具有 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_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,

最佳答案

当您不使用 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 不会试图引诱他们。

编辑2

还有一个更重要的问题。如果您在 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

关于php - Laravel timestamps() 不会创建 CURRENT_TIMESTAMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34515938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com