我有一个名为activated_at
的字段,我希望像Laravel中的其他日期一样对待它。在数据库中,它是一个时间戳,我将其插入$dates
数组并与updated_at
,created_at
和deleted_at
等常见日期一起插入。
小方注释这是API系统的一部分,它完全不依赖于表单和Web,因此我无法直接从视图转换数据
问题在于,为了设置和正确设置,我设置了两个mutator(AKA Getter和Setter)。
当前的setter,它不是那里最好的解决方案,但老实说我不知道如何创建一个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中使用mutator处理DateTime?我不介意处理所有日期时间,因为created_at
,updated_at
和deleted_at
已经在幕后处理
TL; DR
有没有更好的方法来使用Laravel 5.1.x中的mutators处理DateTime?我不介意处理所有日期时间,因为
created_at
,updated_at
和deleted_at
已经在幕后处理
答案 0 :(得分:0)
使用laravel 5.2时,不需要这个
答案 1 :(得分:0)
据我所知,在Laravel 5.1中,您应该将以下代码添加到您的模型中,其中包含字段' activated_at'。
protected $dates=['activated_at'];
并且您不需要任何getter方法来获取碳对象,您可以直接在控制器中调用它的功能。例如,以用户模型为例:
User::findOrFail(1)->activated_at->diffForHumans();