Изменить формат средства выбора даты и сохранить в базе данных в laravel

У меня есть таблица log_leave, как показано ниже.

    id |  name   | request_day_leave | start_leave | end_leave
     1   Michael            5          2019-04-01    2019-04-05
     2   Johan              3          2019-04-08    2019-04-011

Я хочу изменить отображение даты в форме просмотра лезвия, поэтому, когда пользователь нажимает дату, он показывает дд-мм-гг. И когда пользователь видит отчет журнала, он выглядит так, как показано ниже.

     id |  name   | request_day_leave | Leave Start | Leave End
     1   Michael            5           01-04-2019    05-04-2019
     2   Johan              3           08-04-2019    11-04-2019

Я изменил формат средства выбора даты в представлении формы, но когда мне нужно сохранить дату в базе данных, отображается сообщение об ошибке, как показано ниже.

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '08-04-2019' for column 'from_date' at row 1

Я попытался использовать мутатор в модели и добавил новое значение в config/app.php, но все равно получил то же сообщение об ошибке.

Вот код конфигурации/приложения

'date_format' => 'd/m/Y',
'date_format_js' => 'dd/mm/yy' 

Вот код выбора даты

 $('#from').datepicker({
    showOnFocus: false,
    showTrigger: '#calImg',
    beforeShowDay: noWeekendsOrHolidays,
    numberOfMonths: 1,
    dateFormat: 'dd-mm-yy'
 });
    $('#to').datepicker({
        showOnFocus: false,
        showTrigger: '#calImg',
        beforeShowDay: noWeekendsOrHolidays,
        pickerClass: 'noPrevNext',
        numberOfMonths: 1,
        dateFormat: 'dd-mm-yy'
 });
});

Вот код в модели Log Leave

class LogLeave extends Model
{
//
protected $table = 'log_leave';

public function setEntryDateAttribute($input)
{
    $this->attributes['start_leave'] = 
    Carbon::createFromFormat(config('app.date_format'), $input)->format('dd-mm-yy');
    $this->attributes['end_leave'] = 
    Carbon::createFromFormat(config('app.date_format'), $input)->format('dd-mm-yy');
}

}

Как исправить эту проблему?

Спасибо

Здравствуйте, MySQL извлекает и отображает значения DATE в формате «ГГГГ-ММ-ДД», поэтому перед вставкой в ​​БД отформатируйте их соответствующим образом.

Sonam Tripathi 08.04.2019 08:58

Привет @SonamTripathi, да, я хочу, чтобы когда журнал просмотра пользователя оставался в представлении формы, в дате начала и дате окончания он отображался в формате д-м-г вместо базового формата базы данных (г-м-д)

Ikram Shabri 08.04.2019 09:07

Да, я понял твою озабоченность. Вам нужно не менять формат в представлении, просто сделайте то же самое, как только форма будет отправлена ​​на стороне PHP.

Sonam Tripathi 08.04.2019 09:18

Привет, да, спасибо за ваше предложение, я думаю, что в базе данных формат будет по умолчанию, все, что мне нужно, это изменить формат, когда в поле зрения

Ikram Shabri 08.04.2019 09:45
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
4
1 533
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я снова думаю, что формат() не требуется

Carbon::createFromFormat('d/m/Y',$input);

или

Carbon::createFromFormat(config('app.date_format'), $input);

Я думаю, что вы получаете ввод в виде строки, поэтому вы можете получить эту ошибку $date = strtotime($input); Carbon::createFromFormat(config('app.date_format'), date('d/m/Y', $date));

guruprasad ks 08.04.2019 09:29

Вы должны преобразовать формат в гггг-мм-дд при сохранении в базе данных

public function setEntryDateAttribute($input)
{
    $this->attributes['start_leave'] = 
    Carbon::createFromFormat(config('app.date_format'), $input)->format('Y-m-d');
    //should be format('Y-m-d') not format('dd-mm-yy')

    $this->attributes['end_leave'] = 
    Carbon::createFromFormat(config('app.date_format'), $input)->format('Y-m-d');
    //same applies here
}

А затем используйте средства доступа для форматирования значения в формате дд-мм-гггг.

public function getStartLeaveAttribute($value)
{
    return Carbon::parse($value)->format('d-m-Y');
}

public function getEndLeaveAttribute($value)
{
    return Carbon::parse($value)->format('d-m-Y');
}

Другие вопросы по теме