如何在 Laravel 迁移中设置默认 DateTime()? [复制]

Posted

技术标签:

【中文标题】如何在 Laravel 迁移中设置默认 DateTime()? [复制]【英文标题】:How to set default DateTime() in Laravel migrations? [duplicate] 【发布时间】:2016-09-05 11:27:33 【问题描述】:

我正在尝试实现如下所示的功能:

$table->dateTime('time')->default(new \DateTime());

这个确切的代码失败了,因为

[错误异常] DateTime 类的对象无法转换为字符串

另一个问题是,我觉得应该有更强大/优雅的方式来解决这个问题。那么,如何在迁移中正确设置默认的DateTime 值呢?

【问题讨论】:

我不明白为什么这个问题被标记为重复。 Timestamp 和 dateTime 相似,但没有一个答案说明如何为dateTime 设置默认值,而不是timestamp。要设置 dateTime 默认值,您可以使用Carbon$table->dateTime('time')->default(\Carbon\Carbon::now()); @Mirceac21 挑战在于它将设置为当时的实际当前时间。这将动态设置它$table->dateTime('app_date')->default(DB::raw('CURRENT_TIMESTAMP')); @Mirceac21 这是一个非常糟糕的方法。您想要插入时的当前日期时间,而不是在宣布迁移时! @Juan @kakoma 我认为问题是关于使用DateTime 时迁移引发的错误。你们都是对的,但这取决于应用程序需要什么“时间”来使用 phpmysql 或固定日期(例如:Carbon::yesterday())。问题是如何设置默认日期时间而不是当前时间。 【参考方案1】:

试试这个:

$table->timestamp('time')->useCurrent = true;

看看,如果这有帮助。

【讨论】:

为什么使用true?是否需要? 您应该可以拨打$table->timestamp('time')->useCurrent()。它可能会做完全相同的事情,但不会结束链条,这可以让你做例如$table->timestamp('time')->useCurrent()->change()。不过,这可能来自更新版本的 Laravel,而不是 2016 年的版本。 我认为@SteenSchütt 的方式更优雅......谢谢......我只是编辑 Gaurav Dave 的答案以方便其他人......

以上是关于如何在 Laravel 迁移中设置默认 DateTime()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在迁移 laravel 5.1 中设置自动增量字段从 1000 开始

如何在 Laravel 模型上设置属性的默认值 [重复]

如何在 Laravel 中设置默认控制器?

如何使用 django 1.7.3/postgres 迁移在数据库中设置默认列值?

Yii1在迁移中设置DB列的默认值

如何在Laravel 7中设置全局的Carbon格式?