我目前正在做一个项目,它允许用户上传一个.xlxs
的文件,其中包含很多行。我使用Laravel-excel 3.1 maatwebsite/excel": "^3.1"
来开发这个任务。问题是,如果.xlsx
文件少于20行,一切工作正常。但如果文件有超过20行,laravel excel抛出以下merror消息:Argument 1 passed to Maatwebsite\Excel\Imports\ModelManager::Maatwebsite\Excel\Imports\{closure}() must be an instance of Illuminate\Database\Eloquent\Model, instance of Illuminate\Http\RedirectResponse given, called in C:\xampp\htdocs\TCF-CRM\vendor\laravel\framework\src\Illuminate\Collections\Traits\EnumeratesValues.php on line 245
我试图改变请求文件,因为我看到在互联网上的不同网站,但没有工作。
错误消息说是RedirectResponse有问题,但就是不知道为什么(我想是文件大小的问题).我试着增加php.ini上的上传值设置,但没有用.
我也想过先上传文件,然后导入到laravel-excel作为服务器上的现有文件。但不知道如何做到这一点。
控制器功能:
public function upload_base (Request $request){
$request->validate([
'base_xls' => 'required|mimes:xlsx, csv, xls'
]);
Base_comercial::truncate();
Excel::import(new BaseComercialImport, request()->file('base_xls')->store('temp'));
return redirect()->route('dashboard')->with('success', '¡Base comercial cargada exitosamente!');
}
导入类:
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
/* id estado converter */
$estado = $this->estado_validate($row['estado']);
if ($estado == "ERROR"){
return redirect()->back()->with('Error', '¡Estado inválido!');
}
/* --- */
return new Base_comercial([
'fecha' => Date::excelToDateTimeObject($row['fecha']),
'nom_cliente' => $row['cliente'],
'nom_proyecto' => $row['nom_proy'],
'cod_cc' => $row['cod_cc'],
'valor_proyecto' => $row['vr_proy'],
'com_1' => $row['com1'],
'com_2' => $row['com2'],
'com_3' => $row['com3'],
'id_estado' => $estado,
'fecha_inicio' => Date::excelToDateTimeObject($row['f_inicio']),
'dura_mes' => Date::excelToDateTimeObject($row['dura_mes']),
'id_user' => Auth::user()->id,
]);
}
public function estado_validate ($estado){
switch ($estado){
case "CERRADO":
$estado = 1;
break;
case "COTIZACION":
$estado = 2;
break;
case "EJECUCIONXFACTURAR":
$estado = 3;
break;
case "PERDIDO":
$estado = 4;
break;
case "PROPUESTA":
$estado = 5;
break;
case "VENTA":
$estado = 6;
break;
case "VENTAEJECUCIÓN":
$estado = 7;
break;
default:
$estado = "ERROR";
break;
}
return $estado;
}
途径:
Route::post('/base-upload', [ComercialController::class, 'upload_base'])->middleware(['auth'])->name('base-upload');
UPDATE我设法将xlsx文件保存在服务器上,然后导入它。然而,我得到了完全相同的错误消息。
1条答案
按热度按时间rn0zuynd1#
好的,我成功了。它只是在estado validate函数上有一个重音符号()。所以,当$estado =“ERROR”时,一个重定向被触发。这个重定向导致了这个问题。