【问题标题】:Laravel, Carbon and Timestamp, how to set default value?Laravel、Carbon 和 Timestamp,如何设置默认值?
【发布时间】:2016-11-11 04:10:26
【问题描述】:

我有一个 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;

感谢您的帮助....

【问题讨论】:

  • 为什么不将该字段设为空?

标签: php mysql laravel timestamp php-carbon


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你可以试试:

    $item->repaired_at->year < 1
    

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 2019-01-27
      • 2023-02-24
      • 2015-05-02
      • 2018-03-27
      • 2018-11-23
      • 2019-06-01
      • 2021-01-15
      相关资源
      最近更新 更多