忽略将重复数据插入数据库似乎无法正常工作
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);
}
我正在使用 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);
}