4
다른 서비스에서 JSON을 가져 와서 테이블에 많은 데이터를 삽입하려고합니다. 나는 그것을 실행할 때마다 충돌하지 않는 방식으로하고 싶다. 테이블의 내 PK에 내 고유 한 제약 조건을 유지하고 싶습니다. (동일한 데이터를 두 번 삽입하지 않으려 고하지만) 특정 테이블에서만 laravel이 치명적인 오류를 발생시키지 않도록하고 싶습니다.).중복 키를 삽입 할 때 laravel eloquent가 오류를 무시합니다.
데이터를 삽입하고 중복 된 기본 키가있는 다른 데이터를 삽입하려고하면 어떻게 삽입합니까?
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