我正在尝试加载一个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'没有默认值。我真的很沮丧,任何帮助将不胜感激。
答案 0 :(得分:0)
我没有在excel_import类中返回新项目,而是创建并保存了一个新项目,如下所示:
$item=new Item;
$item->name=$row[1];
$item->user=$row[0];
$item->expiry_date=$date;
$item->save();