You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:45:03