首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel timestamps()不会创建CURRENT_TIMESTAMP

Laravel timestamps()不会创建CURRENT_TIMESTAMP
EN

Stack Overflow用户
提问于 2015-12-30 01:28:57
回答 3查看 48.5K关注 0票数 16

我有一个具有timestamps()方法的迁移,然后我有一个种子来播种这个表。

代码语言:javascript
复制
Schema::create('mytable', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    $table->timestamps();
});

种子看起来像这样:

代码语言:javascript
复制
DB::table('mytable')->insert([
    [
        'title' => 'My Awesome Title'
    ]
]);

当它全部使用以下命令运行时:

代码语言:javascript
复制
php artisan migrate:refresh --seed

项目被插入,但是created_atupdated_at的值都是0000-00-00 00:00:00,为什么没有正确设置它们呢?

下面是它创建的列方案:

代码语言:javascript
复制
`created_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',

我想要这些计划:

代码语言:javascript
复制
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-30 01:31:38

当您插入未使用Eloquent的数据时,您需要自己插入时间戳。

如果您使用:

代码语言:javascript
复制
$x = new MyTable();
$x->title = 'My Awesome Title';
$x->save();

您将正确地填写时间戳(当然,您需要首先创建MyTable模型)

编辑

如果你真的想要它,你可以改变:

代码语言:javascript
复制
$table->timestamps();

进入:

代码语言:javascript
复制
$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));

如果为该表创建模型,则应设置

代码语言:javascript
复制
$timestamps = false;

以确保Eloquent不会让他们上当受骗。

EDIT2

还有一个更重要的问题。如果你在PHP中的表和MySQL中的其他表中混合了设置日期,你应该确保在PHP和MySQL中都有完全相同的日期时间(和时区),或者你应该使用与你在记录中设置的相同的日期比较( MySQL或PHP)。否则,在运行查询时,您可能会得到意外的结果,例如

代码语言:javascript
复制
SELECT * FROM mytable WHERE DATE(created_at) = CURDATE()

可能不同于在传递PHP日期的情况下运行查询

代码语言:javascript
复制
"SELECT * FROM mytable WHERE DATE(created_at) = '".date('Y-m-d")."'"

因为在PHP服务器上可能是2015-12-29,但在MySQL服务器上可能是2015-12-30

票数 39
EN

Stack Overflow用户

发布于 2017-10-25 04:16:19

对于更高版本,您可以简单地使用。(source)

代码语言:javascript
复制
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
票数 13
EN

Stack Overflow用户

发布于 2015-12-30 03:32:27

如果我输入时间戳并在工厂中设置,我会使用carbon库。如果不是这样,你可以这样做:

代码语言:javascript
复制
$timestamps = false;

如果我不打算使用$table->timestamps();,我会从迁移中删除它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34515938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档