2016-08-08 4 views
0

を複製し、continuます。 フィールドの電子メールに一意の制約があります。配列に複数の同じ電子メールがある場合、「重複エントリ」というエラーが表示され、クエリが停止します。質量は、インサート、私はLaravelを使用していますし、私は大規模な挿入をやろうとしている

重複しているエントリがあっても挿入を続けることはできますか?私はそれらを無視することはできますか? (そしてデバッグのために入手してください)

ありがとう!

+0

次試みる中断せずにデータを挿入し続けたい場合は、この本1の重複です:http://stackoverflow.com/questions/12622341/insert -ignore-using-laravels-fluent – Galz

答えて

1

これにtry\catchを使用してIlluminate\Database\QueryExceptionをキャッチすることができます。

try{ 
    DB::table('users')->insert(
     [ 
      'name' => $user->user_name, 
      'email' => $user->user_email, 
     ] 
    ); 
} catch(Illuminate\Database\QueryException $e) { 
    //i want to consume this and continue, so I do nothing here. 
} 

エラーコードが$eを介して提供され、1062Duplicate Key警告です。あなたはあなたのcatchブロックの内部を特に調べることができます。

catch (Illuminate\Database\QueryException $e){ 
    $errorCode = $e->errorInfo[1]; 
    if($errorCode == 1062){ 
     // houston, we have a duplicate entry problem 
    } 
} 

Credit for the catch functionality here

0

あなたは

foreach ($users as $key => $user) { 
    try { 
     DB::table('users')->insert([ 
      'name' => $user->user_name, 
      'email' => $user->user_email, 
     ]); 
    } catch (\Exception $e) { 
     //dump detail hear 
    } 
} 
関連する問題