忽略将重复数据插入数据库似乎无法正常工作

Ignore inserting duplicated data into the DB does not seem to be working properly

我正在使用 Laravel 5.8 和 LaravelExcel 导入一个 Excel 文件,该文件包含一个名为“国家代码”的列,并且此代码必须是唯一的在数据库中。

因此,如果用户在他的 Excel 文件中输入了重复的国家代码,则必须显示一条消息并向他显示重复的国家代码。

所以我在导入时编码了这个 Class:

    $query=DB::table('olympiad_1400');
    
    $repeated = [];
    
    foreach($formatArray as $arr){
        if(!$query->where('mys_ncode',$arr['nationalCode'])->exists()){
           $query->insert([
                'mys_object_id' => $objectId,
                'mys_object_type_id' => $objectTypeId,
                'mys_olp_id' => 4,
                'mys_name' => $arr['name'],
                'mys_fname' => $arr['family'],
                'mys_ncode' => $arr['nationalCode'],
                'mys_paid_price' => $arr['price'],
                'mys_creator_id' => auth()->user()->usr_id,
           ]);
        }else{
           array_push($repeated, $arr['nationalCode']);
        }
    }
    
    if(!empty($repeated)){
        Session::flash('repeated',$repeated);
    }

现在,如果我通过上传一个 Excel 文件来测试它,该文件包含数据库中已经存在的重复国家代码,它会显示会话 $repeated 中的第一个元素(并忽略插入它)但令人惊讶的是插入了所有其他的(但是,它们都是重复的)。

那么我该如何解决这个问题并忽略将重复的国家代码插入数据库?

试试这个:

$repeated = [];

foreach($formatArray as $arr){
    $query=DB::table('olympiad_1400');
    if(!$query->where('mys_ncode',$arr['nationalCode'])->exists()){
       $query->insert([
            'mys_object_id' => $objectId,
            'mys_object_type_id' => $objectTypeId,
            'mys_olp_id' => 4,
            'mys_name' => $arr['name'],
            'mys_fname' => $arr['family'],
            'mys_ncode' => $arr['nationalCode'],
            'mys_paid_price' => $arr['price'],
            'mys_creator_id' => auth()->user()->usr_id,
       ]);
    }else{
       array_push($repeated, $arr['nationalCode']);
    }
}

if(!empty($repeated)){
    Session::flash('repeated',$repeated);
}