【问题标题】:How does laravel/lumen dateformat 'U' actually works?laravel/lumen dateformat 'U' 是如何工作的?
【发布时间】:2019-02-10 15:45:08
【问题描述】:

我无法在流明中使用 dateformat 'U' 获得时间戳。

迁移中:

        $table->timestamps();

在模型中:

protected $dateFormat = 'U';

protected $dates = [
    'created_at',
    'updated_at',
    'deleted_at'
];

public function getDateFormat()
{
    return 'U';
}

从控制器插入行:

    $model = new ApiKey;
    $model->random= rand();
    $model->name = $name;
    $model->scope = $scope;
    $model->save();

它确实在数据库中插入了行,但 0000-00-00 00:00:00 值为 created_at 和 updated_at 列。

另外,当通过 toArray 或 toJson 检索模型时,它会抛出异常:

我希望 lumen 自动更新时间戳并将时间戳检索为 unixtimestamp 格式,即从 1970 年 1 月 1 日开始的秒数。

另外,$table->timestamps() 没有创建 deleted_at 列。我需要做什么才能通过 laravel 创建此列。

除了$table->timestamp('deleted_at');,还有其他选择吗?

我找到了一个解决方案,将时间戳列更改为 int。但我希望事情以 laravel 的方式完成。

【问题讨论】:

  • ...为什么要使用“U”格式的时间戳字段??
  • 这应该有助于软删除列。 laravel.com/docs/5.6/eloquent#soft-deleting
  • @Devon,我想以 U 格式显示这些字段。在数据库中它仍然可以保留为日期时间。

标签: laravel lumen


【解决方案1】:

Unix 时间戳是整数,与 SQL 日期时间/时间戳字段不兼容。如果要使用 unix 时间戳,请使用整数字段类型进行存储。

timestamps() 方法只创建 created_at 和 updated_at,默认不启用软删除。如果需要整数存储,则不应使用此方法。


如果您只想在序列化数据时更改输出格式,请使用强制转换:

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'created_at' => 'datetime:U',
];

【讨论】:

  • 我不太关心整数存储。我想把它读成整数。我的意思是protected $dateFormat = 'U'; 应该做什么。对吗?
  • 这改变了它的存储和序列化方式。在此处阅读文档:laravel.com/docs/5.6/eloquent-mutators#date-mutators
  • @KetanYekale 我用我分享的链接中记录的投射更新了我的答案
  • 谢谢德文郡。似乎有道理。我会试试这个。
【解决方案2】:

这可能是由于 Laravel/Lumen 将日期/时间列创建为类型 timestamp 而不是 int 因此您试图在字段中保存错误类型的数据,导致 0000-00-00 00:00:00 .

这也会导致碳问题,因为您尝试createFromFormat 与内容相比格式错误。

您可以在迁移中使用$table->integer('deleted_at'); 来创建deleted_at 列。

TL;DR:

使用$table->integer('updated_at') 手动创建日期时间列。

【讨论】:

  • 你不会想要使用 softDeletes() 因为那会创建一个时间戳字段。
【解决方案3】:
<?php

namespace App\Traits;

use Illuminate\Support\Carbon;

trait sqlServerDateFormat
{

    public function fromDateTime($value)
    {
        return Carbon::parse(parent::fromDateTime($value))->format('d-m-Y H:i:s');
    }

}

【讨论】:

  • format('d-m-Y H:i:s'); } }
  • 请在您的答案中添加一些解释,以便其他人可以从中学习
猜你喜欢
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 2017-07-28
  • 2016-05-26
  • 2016-07-25
  • 1970-01-01
  • 2018-03-15
  • 2016-05-07
相关资源
最近更新 更多