我正在使用 Laravel 5.8 和 LaravelExcel 匯入一個 Excel 檔案,該檔案包含一個名為“國家代碼”的列,并且該代碼在資料庫中必須是唯一的。
因此,如果用戶在其 Excel 檔案中輸入了重復的國家代碼,則必須出現一條訊息并向他顯示重復的國家代碼。
所以我在匯入類中對此進行了編碼:
$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(并忽略插入它),但令人驚訝的是插入了所有其他元素(但是,它們都是重復的) .
那么我該如何解決這個問題并忽略將重復的國家代碼插入資料庫呢?
uj5u.com熱心網友回復:
試試這個:
$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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380516.html
標籤:php 拉拉维尔 laravel-5.8
