我有一个名为的字段activated_at
,我想像对待 Laravel 中的其他日期一样对待它。在数据库中,它是一个时间戳,我将它$dates
与常见日期(如updated_at
,created_at
和deleted_at
.
小旁注,这是 API 系统的一部分,它根本不依赖表单和 Web,所以我不能直接从视图转换数据
问题是,为了正确设置和获取它,我设置了两个突变器(AKA Getter 和 Setter)。
当前的设置器,它不是最好的解决方案,但老实说,我不知道如何创建一个设置器,它将所有传递的数据转换为适合数据库的数据。我正在使用 MariaDB
* Automatically parse the date from metric system to
* Imperial system because American DATABASES
*
* @param string $value
*/
public function setActivatedAtAttribute($value)
{
if(!$value instanceof \DateTime)
{
$value = Carbon::createFromFormat('d/m/Y H:i:s', $value)->toDateTimeString();
}
$this->attributes['activated_at'] = $value;
}
无论如何,这个设置器工作得很好,我写了一堆单元测试,我对它们很满意。
真正的问题是getter,我虽然它返回日期的Carbon实例,但它只是返回一个字符串
/**
* Return the correct metric format of the date
*
* @param string $value
* @return string
*/
public function getActivatedAtAttribute($value)
{
// Because it's a string we cannot use Carbon methods
// Unless we instantiate a new Carbon object which it stupid
// Since the activated_at field is inside the $dates array
// Shouldn't we get the carbon object automatically?
return $value;
}
我担心的是 getter 方法内的注释块。
话虽如此,在 Laravel 5.1.x 中是否有更好的方法来处理 DateTime ?我不介意处理所有的约会时间created_at
,updated_at
并且deleted_at
已经在幕后处理了
TL;博士
有没有更好的方法来使用 Laravel 5.1.x 中的 mutators 处理 DateTime?我不介意处理所有的约会时间
created_at
,updated_at
并且deleted_at
已经在幕后处理了