Laravel Excel导入多行数据时提取指定列存入hasil表nilai_awal的实现方法
Laravel Excel导入多列数据存储方案
方案1:使用表头映射(推荐,稳定性更高)
先给你的导入类实现WithHeadingRow接口,Laravel Excel会自动识别第一行作为表头,你可以直接通过列名读取数据,避免硬编码索引带来的维护问题:
use Maatwebsite\Excel\Concerns\ToCollection; use Maatwebsite\Excel\Concerns\WithHeadingRow; class HasilImport implements ToCollection, WithHeadingRow { public function collection(Collection $rows) { foreach ($rows as $row) { // 存储kriteria 1列数据 Hasil::create([ 'kriteria_id' => 1, // 替换为kriteria 1对应的实际主键ID 'alternatif_id' => $row['alternatif_id'], // 替换为你alternatif_id对应的实际列名 'nilai_awal' => $row['kriteria_1'], ]); // 存储kriteria 2列数据 Hasil::create([ 'kriteria_id' => 2, // 替换为kriteria 2对应的实际主键ID 'alternatif_id' => $row['alternatif_id'], 'nilai_awal' => $row['kriteria_2'], ]); } } }
方案2:保留索引读取
如果你不想用表头映射,还是按列索引读取的话,调整代码如下即可,注意确认kriteria 2对应的列索引是否正确:
use Maatwebsite\Excel\Concerns\ToCollection; use Maatwebsite\Excel\Concerns\WithStartRow; class HasilImport implements ToCollection, WithStartRow { public function collection(Collection $rows) { foreach ($rows as $row) { // 存储kriteria 1列数据 Hasil::create([ 'kriteria_id' => 1, // 替换为kriteria 1对应的实际主键ID 'alternatif_id' => $row[30], 'nilai_awal' => $row[14], ]); // 存储kriteria 2列数据 Hasil::create([ 'kriteria_id' => 2, // 替换为kriteria 2对应的实际主键ID 'alternatif_id' => $row[30], 'nilai_awal' => $row[15], // 替换为kriteria 2对应的实际列索引 ]); } } public function startRow(): int { return 2; } }
注意事项
- 原代码中
create方法数组末尾多余的空字符串需要删除,否则会抛出字段不存在的异常 - 如果不确定列索引或列名,可以在循环内加
dd($row)打印行数据确认对应字段位置
内容的提问来源于stack exchange,提问作者Ibnu
相关产品推荐
相关产品推荐

