laravel/lumen dateformat 'U' 是如何工作的?

How does laravel/lumen dateformat 'U' actually works?

我无法在 lumen 中使用日期格式 '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 的方式完成。

Unix 时间戳是整数,与 SQL datetime/timestamp 字段不兼容。如果要使用unix时间戳,使用整型字段类型存储。

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


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

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

这可能是由于 Laravel/Lumen 创建的 date/time 列类型为 timestamp 而不是 int 所以你试图保存错误的类型字段中的数据,导致 0000-00-00 00:00:00.

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

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

长话短说:

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

<?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');
    }

}