4
我從其他服務獲取JSON並希望在表中插入一堆數據。我想這樣做,它不會每次運行時都會崩潰。我想保留我的表的唯一約束(因爲我不想插入相同的數據兩次),但是,我不希望laravel如果發生致命錯誤(僅在特定的表上) )。laravel雄辯插入重複密鑰時忽略錯誤
如何插入我的數據並繼續插入,如果我嘗試插入另一個具有重複主鍵的數據?
Schema::create('dummy', function (Blueprint $table) {
$table->integer('id')->unique();
$table->string('name',100);
});
從另一個API中獲取一堆JSON。然後插入所有行:
{
'id':1,
'name': 'one'
},{
'id':2
'name':'two'
}
那使。
DB::table('dummy')->insert([
['id' => 1, 'name' => 'one'],
['id' => 2, 'name' => 'two']
]);
然後又有一天,第三方API有新的數據。而想要更新我的數據庫:
獲取JSON和接收:
{
'id':1,
'name': 'one'
},{
'id':2
'name':'two'
},{
'id':3
'name':'three'
}
,使得:
DB::table('dummy')->insert([
['id' => 1, 'name' => 'one'], // <-- will crash there cause PK already existe, but want to keep inserting
['id' => 2, 'name' => 'two'], // <-- skipp cause already exist
['id' => 3, 'name' => 'three'] // insert that line.
]);
您可以想出處理重複項的自定義查詢(例如ON DUPLICATE KEY UPDATE)以提高效率。或者,您將包含將數據插入到表中的代碼片段放在try {...} catch(\ Exception $ e)中{//出錯了。 } – adelineu
@tadman我雖然很清楚 –
這是一個特定的問題,但是如果你包含了一小段代碼來證明問題,那將是非常明確的。 – tadman