php Laravel Excel在超过20行的电子表格上启动错误

k10s72fa  于 2023-01-24  发布在  PHP
关注(0)|答案(1)|浏览(122)

我目前正在做一个项目,它允许用户上传一个.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文件保存在服务器上,然后导入它。然而,我得到了完全相同的错误消息。

rn0zuynd

rn0zuynd1#

好的,我成功了。它只是在estado validate函数上有一个重音符号()。所以,当$estado =“ERROR”时,一个重定向被触发。这个重定向导致了这个问题。

相关问题