Laravel 8 Excel导入数据时报id_subdist字段不能为空错误如何解决
问题根因排查
核心问题出在你未提供的TransaksiImport导入逻辑类,以及Transaksi模型的配置上,常见错误点如下:
- Excel列名和导入类的字段映射规则不匹配,比如列名有多余空格、大小写不一致、拼写错误,导致读取不到对应值
- 导入类未实现
WithHeadingRow接口,按索引取值时取错了列位置,拿到空值 Transaksi模型的$fillable属性未包含id_subdist字段,Laravel批量赋值时自动过滤该字段,导致插入值为null- 导入类中对
id_subdist的自定义处理逻辑错误,有效值被误转为null
修复步骤
- 首先校验导入类的逻辑正确性,示例正确写法如下:
<?php namespace App\Imports; use App\Transaksi; use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\WithHeadingRow; class TransaksiImport implements ToModel, WithHeadingRow { public function model(array $row) { // 临时打开下行代码,执行导入时会打印每行数据,确认是否能读到id_subdist有效值 // dd($row); return new Transaksi([ 'id_subdist' => $row['id_subdist'], // 剩余其他字段按映射关系补充 ]); } }
如果打印的$row数组中没有id_subdist对应有效值,检查Excel对应列名的拼写、前后空格,调整映射规则即可。
- 检查
App\Transaksi模型的批量赋值配置,确保id_subdist在$fillable数组中:
// Transaksi.php protected $fillable = [ 'id_subdist', 'id_toko', 'id_dso', // 其余所有需要批量插入的字段都要加在这里 ];
- 若上述配置均正常,检查
id_subdist字段的数据库类型是否和Excel填入的值类型匹配,比如字段为int类型时,Excel填入非数字内容会被转换为null,调整Excel内容或者字段类型即可。
内容的提问来源于stack exchange,提问作者Lucas Futami
相关产品推荐
相关产品推荐

