Laravel 8.6使用Maatwebsite Excel导入时id_subdist默认值不生效问题
问题原因
- 代码逻辑顺序错误:
return new Pelanggan()语句写在了id_subdist的判断逻辑之前,return执行后后续代码会直接终止运行,$row[7]的判断永远不会生效 - 赋值变量未生效:即使调整执行顺序,你定义的
$dataArray变量没有被传入模型创建的参数中,赋值操作不会生效
解决方案
1. 修正导入类的逻辑
调整属性组装顺序,先完成所有字段的判断组装,再创建模型实例返回,修改后的PelangganImport代码如下:
<?php namespace App\Imports; use App\Models\Pelanggan; use Maatwebsite\Excel\Concerns\ToModel; class PelangganImport implements ToModel { /** * @param array $row * * @return \Illuminate\Database\Eloquent\Model|null */ public function model(array $row) { // 先组装基础字段 $data = [ 'id_pelanggan' => $row[0], 'nama_pelanggan' => $row[1], 'alamat1_pelanggan' => $row[2], 'alamat2_pelanggan' => $row[3], 'id_kategori_pelanggan' => $row[4], 'id_channel' => $row[5], 'id_outlet' => $row[6], ]; // 存在id_subdist时追加字段 if (isset($row[7]) && !empty($row[7])){ $data['id_subdist'] = $row[7]; } // 最后返回模型实例 return new Pelanggan($data); } }
2. 检查模型批量赋值配置
确认App\Models\Pelanggan模型的$fillable属性中已添加id_subdist字段,否则Laravel的批量赋值机制会自动过滤该字段:
// Pelanggan.php 模型文件中 protected $fillable = [ // 其他已有的可批量赋值字段 'id_pelanggan', 'nama_pelanggan', 'alamat1_pelanggan', 'alamat2_pelanggan', 'id_kategori_pelanggan', 'id_channel', 'id_outlet', 'id_subdist', // 必须添加这个字段 ];
补充说明
上述写法未手动给id_subdist设置默认值,当$row[7]为空时不会传入该字段,会自动触发迁移文件中定义的default('DUMMY')默认值,完全符合你的业务配置。
内容的提问来源于stack exchange,提问作者Laravel8.6
相关产品推荐
相关产品推荐

