繁体   English   中英

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

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

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

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

所以我在 Import 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 文件进行测试,该文件已经存在于数据库中,它会显示 session $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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM