在Laravel中从字符串输入日期到mysql数据库

时间:2019-06-17 13:46:38

标签: php mysql date laravel-5

我正在尝试加载一个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">

下面是使用Maatwebsite的excel类的控制器中的导入功能。

 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();

我还在创建表单和excel_import类中使用了dd,该类显示但变量是Carbon datetime实例。结果是expiry_date变量的空字段。如果我未将expiry_date设置为可为空,则会返回错误SQLSTATE [HY000]:常规错误:1364字段'expiry_date'没有默认值。我真的很沮丧,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我没有在excel_import类中返回新项目,而是创建并保存了一个新项目,如下所示:

        $item=new Item;
        $item->name=$row[1];
        $item->user=$row[0];
        $item->expiry_date=$date;
        $item->save();