Laravel: как установить формат даты для кастомизации модели?
У меня в модели:
protected $casts = [
'date' => 'date',
];
Есть ли у laravel возможность устанавливать формат приведения, например:
protected $casts = [
'date' => 'date_format:d/m/yyyy',
];
?
РЕДАКТИРОВАНИЕ
Я попробовал это:
В модели:
protected $dateFormat = 'm/d/Y';
protected $dates = ['driver_expiration', 'created_at', 'updated_at', 'deleted_at'];
protected $casts = [
'driver_expiration' => 'date',
];
Я сохранил дату (driver_expiration) как '01/012016 ', но дата была сохранена.
Документация по Laravel:
https://laravel.com/docs/5.1/eloquent-mutators
Сообщите нам, что $ dateFormat работает только для отметок времени ("create_at", "updated_at", "Удаленный_ат")
Ответы
Ответ 1
Вместо того, чтобы вводить формат даты, вы можете использовать мутаторы для установки формата, который вам нравится:
Например, если ваш столбец был назван date
, вы можете добавить в свою модель следующую функцию:
public function setDateAttribute( $value ) {
$this->attributes['date'] = (new Carbon($value))->format('d/m/y');
}
setDateAttribute
всегда находится в set[ColumnName]Attribute
, используя CamelCase. date
в $this->attributes['date']
должна также соответствовать фактическому имени столбца в таблице.
Когда вы create
или update
запись в своей базе данных, формат будет автоматически изменен функцией выше.
Примечание. Возможно, вам понадобится добавить инструкцию use Carbon\Carbon
в начало вашей модели, чтобы использовать библиотеку Carbon.
Взгляните на другие примеры.
ОБНОВИТЬ
При желании вы можете определить формат столбцов date
используя:
protected $dateFormat = 'Y-m-d';
Ответ 2
После laravel 5.6,
Вы можете индивидуально настроить формат яркой даты и дат-времени:
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];
Этот формат используется, когда модель сериализуется в массив или данные JSON
Ответ 3
Просто добавьте в модель:
protected function asDateTime($value)
{
return parent::asDateTime($value)->format('d/m/y');
}
этот метод Eloquent первоначально возвращает экземпляр Carbon, поэтому вы можете получить этот экземпляр и вызвать его метод format(). Если вы хотите применить это решение ко всем моделям, просто создайте новый класс, расширенный от Eloquent, и поместите туда этот метод, чтобы затем расширить модели из этого нового класса.
Ответ 4
Я создаю новое свойство модели:
protected $datesConvert = ['driver_expiration'];
И затем я обновил базовую модель:
public function save(array $options = [])
{
if(isset($this->datesConvert)){
foreach($this->datesConvert as $date){
$this->attributes[$date] = \Carbon\Carbon::createFromFormat('d/m/Y', $this->attributes[$date])->format('Y-m-d');
}
}
parent::save($options);
}
public function getAttribute($key)
{
$value = parent::getAttribute($key);
if(isset($this->attributes[$key])){
if(isset($this->datesConvert) && in_array($key, $this->datesConvert)){
$value = \Carbon\Carbon::createFromFormat('Y-m-d', $value)->format('d/m/Y');
}
}
return $value;
}
и это решение работает для меня. Код может быть перенесен в свойство. Формат можно поместить в $ dateConvert Format = 'd/m/Y';
Ответ 5
Объекты Collection не влияют на приведение типов. Используется для форматов json и array. Если вам нужен индивидуальный актерский состав, который вы можете использовать
$user->date->format('m-d-Y');