Laravel,Carbon和Timestamp,如何设置默认值?

Laravel, Carbon and Timestamp, how to set default value?

我有一个 5.1.26 Laravel 项目,其中一个模型有很多时间戳字段,它们都是在迁移时使用类似以下内容创建的:

$table->timestamp('repaired_at');

在 MySQL 字段获得默认值 '0000-00-00 00:00:00'

效果很好,如果我想检查,如果一个项目没有被修复,我会通过如下操作检查默认值('0000-00-00 00:00:00'):

if (starts_with($item->repaired_at,"-0001")) { 
   // Date Have not been set
} else {
   // Date have been set
}

因为 Carbon 将“0000-00-00 00:00:00”转换为“-0001-11-30 00:00:00”

问题是我还没有找到一种方法来将时间戳字段设置为其默认值“0000-00-00 00:00:00”

我需要想办法确定日期是否已设置...并且能够将日期重置为默认值(未设置值)...我想继续使用 eloquent 所以我可以简单地做类似的事情:

$item->returned_at = DEFAULT_VALUE;

感谢任何帮助....

不要依赖负日期,而是使特定字段可为空并检查该字段是否为空。

这就是您的新迁移的样子。

Schema::table('table_name', function(Blueprint $table) {
    $table->timestamp('repaired_at')->nullable()->change();
});

你可以试试:

$item->repaired_at->year < 1

$item->repaired_at->lt(Carbon\Carbon::minValue())

但正如@chris 所说,这是在您的数据库中设置它 nullable 的最佳方法。