如何在Laravel中使用laravel-excel导入转置Excel到Eloquent模型
Laravel转置Excel导入Eloquent实现方案
针对你遇到的laravel-excel官方单行映射不支持转置Excel导入的问题,可通过自定义导入类手动转置行列的方式解决,操作步骤如下:
- 第一步:创建导入类实现
ToCollection接口,读取全表数据后做行列转置,再按你的业务规则映射到模型字段
<?php namespace App\Imports; use App\Models\YourModel; use Illuminate\Support\Collection; use Maatwebsite\Excel\Concerns\ToCollection; class TransposedImport implements ToCollection { public function collection(Collection $rows) { // 行列转置处理,将原表的列转为行 $transposedRows = collect(array_map(null, ...$rows->toArray())); // 按需跳过转置后的表头行,示例跳过第一行表头 $transposedRows->skip(1)->each(function ($item) { // 按实际字段对应关系赋值,$item[0]对应转置后第一列的数据 YourModel::create([ 'column1' => $item[0], 'column2' => $item[1], 'column3' => $item[2], // 其余字段自行补充 ]); }); } }
- 第二步:在业务逻辑中调用导入类执行导入即可
// 控制器中调用示例 public function handleImport(\Illuminate\Http\Request $request) { $request->validate([ 'excel_file' => 'required|file|mimes:xlsx,xls' ]); \Maatwebsite\Excel\Facades\Excel::import(new TransposedImport, $request->file('excel_file')); return response()->json(['status' => 'success', 'msg' => '导入完成']); }
如果需要加数据校验、批量插入优化,可对应引入laravel-excel的WithValidation、WithBatchInserts等内置接口即可,完全适配多行转置Excel的导入需求。
内容的提问来源于stack exchange,提问作者Erwin Smith
相关产品推荐
相关产品推荐

