laravel / lumen dateformat'U'实际上如何工作?

时间:2018-09-05 13:15:48

标签: laravel 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();

它确实将行插入到数据库中,但是对created_at和updated_at列具有 0000-00-00 00:00:00 值。

此外,在通过toArray或toJson检索模型时,它引发了异常:

enter image description here

我希望流明以 unixtimestamp格式(即从1970年1月1日开始的秒数)自动更新时间戳并检索时间戳。

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

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

我找到了将时间戳记列更改为int的解决方案托架。但是我希望事情能以laravel的方式完成。

3 个答案:

答案 0 :(得分:1)

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',
];

答案 1 :(得分:0)

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

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

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

TL; DR:

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

答案 2 :(得分:0)

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

}