Изменить формат даты выбора и сохранить в базе данных в laravel - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть таблица 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');
}

} * * тысяча двадцать-один

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

Спасибо

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

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

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');
}
0 голосов
/ 08 апреля 2019

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

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

или

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