我无法使用流明格式的日期格式为'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检索模型时,它引发了异常:
我希望流明以 unixtimestamp格式(即从1970年1月1日开始的秒数)自动更新时间戳并检索时间戳。
此外,$table->timestamps()
没有创建Deleted_at列。我需要怎么做才能通过laravel创建此列。
除了$table->timestamp('deleted_at');
之外还有其他选择吗?
我找到了将时间戳记列更改为int的解决方案托架。但是我希望事情能以laravel的方式完成。
答案 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');
}
}