Введите дату из строки в базу данных mysql в laravel - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь загрузить файл Excel, который содержит даты в виде строк в формате dd.mm.YYYY.Я хочу проанализировать файл Excel и сохранить значения в базе данных MySQL.Я могу сделать это без проблем при создании новой записи в базе данных с помощью формы создания, которая имеет выбираемый HTML-ввод даты в виде:

<input type="date" id="expiry_date" class="form-control @error('expiry_date') is-invalid @enderror" name="expiry_date" value="{{ old('expiry_date') }}" required autocomplete="expiry_date">

Ниже приведена функция импорта внутриконтроллер, который использует класс Excel Maatwebsite.

 public function import()
{
    Excel::import(new excel_import(), storage_path('excel_file.xlsx'));
    return redirect()->route('index');
}

Это вызывает класс excel_import, который показан ниже:

public function model(array $row)
{
    try
    {
        $date = Carbon::createFromFormat("d.m.Y", $row[5])->format('Y-m-d');
        //$timestamp = strtotime($row[5]);
        //$date = date("Y-m-d", $timestamp);
        return new Item([
            'user'       => $row[0],
            'name'       => $row[1],
            'expiry_date'        => $date,

        ]);
    }
    catch(Throwable $t){
        return null;
    }
}

Обратите внимание, что переменная даты, которую я пытаюсь ввести, называется expiry_date.Я пытался получить формат даты из Carbon и из метки времени (как в комментариях), но безрезультатно.В модели, которую я попытался установить как:

 public $casts = ['expiry_date' => 'date:Y-m-d',];
 public $dates = ['expiry_date',];

Также обратите внимание, что я настроил переменную expiry_date следующим образом при миграции:

$table->date('expiry_date')->nullable();

Я также использовал dd вформа create и в классе excel_import, которые показывали, но переменные были экземплярами Carbon datetime.Результатом является пустое поле для переменной expiry_date.Если я не установил expiry_date как nullable, он возвращает ошибку SQLSTATE [HY000]: Общая ошибка: 1364 Поле 'expiry_date' не имеет значения по умолчанию.Я действительно в замешательстве, любая помощь будет оценена.

1 Ответ

0 голосов
/ 17 июня 2019

Вместо возвращения нового элемента в классе excel_import я только что создал и сохранил новый элемент следующим образом, и он работает:

        $item=new Item;
        $item->name=$row[1];
        $item->user=$row[0];
        $item->expiry_date=$date;
        $item->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...