У меня есть поле с именем activated_at
, и я хочу рассматривать его как любую другую дату в Laravel. В базе данных это метка времени, и я вставил ее в массив $dates
вместе с общими датами, такими как updated_at
, created_at
и deleted_at
.
Небольшое примечание: это часть системы API, которая вообще не зависит от форм и сети, поэтому я не могу преобразовать данные непосредственно из представления.
Проблема в том, что для правильной установки и получения я установил два мутатора (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;
}
В любом случае, эти сеттеры работают вполне нормально, я написал кучу модульных тестов, и я получаю от них зеленый.
Настоящая проблема - это геттер, который, как мне кажется, возвращает экземпляр даты 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;
}
Мои опасения находятся в блоке комментариев внутри метода получения.
При этом есть ли лучший способ справиться с обработкой DateTime с помощью мутаторов в Laravel 5.1.x? Я не возражаю против обработки ВСЕХ даты и времени, поскольку created_at
, updated_at
и deleted_at
уже обрабатываются за кулисами
TL;DR
есть ли лучший способ справиться с обработкой DateTime с помощью мутаторов в Laravel 5.1.x? Я не возражаю против обработки ВСЕХ даты и времени, поскольку
created_at
,updated_at
иdeleted_at
уже обрабатываются за кулисами