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

Laravel Excel导入数据添加去重条件仍重复创建供应商问题求助

问题根因

  • 你使用get()方法执行供应商查询,该方法返回的是集合对象,即便无匹配数据也会返回空集合,永远不等于null,导致判断条件始终不生效,每次循环都会触发新建供应商逻辑,产生重复数据。
  • 原逻辑中即便将get()替换为返回单条模型的first()方法,空值场景下直接调用$vendor->id也会抛出属性不存在的错误。

修复代码

你可以直接使用Laravel原生的firstOrCreate()方法,自动实现「存在则返回、不存在则创建」的逻辑,无需手动编写判断分支,修正后的代码如下:

<?php

namespace App\Imports;

use App\Accessory;
use App\AccessoryVendor;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class AccessoryImport implements ToCollection, WithHeadingRow
{
    public function collection(Collection $rows)
    {
        foreach ($rows as $row) {
            // 自动匹配或创建供应商
            $vendor = AccessoryVendor::firstOrCreate(['name' => $row['vendor']]);

            Accessory::create([
                'vendor_id'   => $vendor->id,
                'description' => $row['description'],
                'barcode'     => $row['barcode'],
            ]);
        }
    }
}

补充优化建议

  • 给accessory_vendors表的name字段添加唯一索引,从数据库层面规避重复数据生成风险。
  • 若导入数据量较大,可提前批量查询所有涉及的供应商名称存入内存,减少循环内的数据库查询次数,提升导入效率。

内容的提问来源于stack exchange,提问作者Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:07