Laravel使用Maatwebsite Excel导入产品后如何获取返回的ID列表?
解决方案
第一步:修改 ProductImport 类
给Import类新增公共属性存储导入成功的产品ID,遍历行时把新增的ID存入该属性:
<?php namespace App\Imports; use App\Product; use Illuminate\Support\Collection; use Maatwebsite\Excel\Concerns\ToCollection; class ProductImport implements ToCollection { // 新增公共属性存储导入的产品ID public $importedProductIds = []; public function collection(Collection $rows) { foreach ($rows as $row) { $productId = Product::create([ 'name' => $row[0], 'detail' => $row[1] ])->id; // 把每个新增的ID存入属性数组 $this->importedProductIds[] = $productId; } } }
第二步:在控制器中读取存储的ID
Excel导入完成后直接访问Import实例的自定义属性即可拿到所有ID,按需返回或做后续管控逻辑即可:
public function uploadProducts(Request $request) { $request->validate([ 'import_file' => 'required|file|mimes:xls,xlsx' ]); $path = $request->file('import_file'); $import = new ProductImport; Excel::import($import, $path); // 获取所有录入的产品ID $productIds = $import->importedProductIds; return response()->json([ 'message' => 'uploaded successfully', 'imported_product_ids' => $productIds ], 200); }
- 该方案会收集所有导入成功的产品ID,可直接基于这个数组做权限校验、日志记录等管控逻辑
- 如果需要处理导入失败的场景,可补充try catch捕获创建产品时的异常,过滤失败的ID即可
内容的提问来源于stack exchange,提问作者Lucas Cardemil Villegas
相关产品推荐
相关产品推荐

