-
Query Builder를 사용하여 데이터를 삽입하는 방법백엔드/laravel 2024. 1. 14. 12:06
- 단일 행 삽입:
- insert 메서드는 데이터베이스에 단일 행을 삽입하는 데 사용됩니다.
- 키-값 쌍의 배열을 전달하며, 키는 열 이름을 나타내고 값은 삽입할 데이터를 나타냅니다.
- 예시:
- DB::table('posts')->insert([
'user_id' => 1,
'title' => 'DB 페서드를 통해 삽입됨',
'slug' => 'db-페서드를-통해-삽입됨',
'excerpt' => '일부 발췌문',
'description' => '일부 설명',
'is_published' => true,
'minutes_to_read' => 2,
]);
- 다중 행 삽입:
- 여러 행을 삽입하려면 insert 메서드에 배열의 배열을 전달하면 됩니다. 각 내부 배열은 별도의 행을 나타냅니다.
- 예시:
- DB::table('posts')->insert([
[
'user_id' => 1,
'title' => 'DB 페서드를 통해 삽입 2',
'slug' => 'db-페서드를-통해-삽입-2',
// 다른 열들...
],
[
'user_id' => 1,
'title' => 'DB 페서드를 통해 삽입 3',
'slug' => 'db-페서드를-통해-삽입-3',
// 다른 열들...
],
]);
- 삽입 또는 무시:
- insertOrIgnore 메서드는 데이터가 이미 테이블에 존재하지 않을 때만 데이터를 삽입하도록 하는 데 사용됩니다. 기본 키 또는 고유 키 제약 조건과 충돌이 있는 경우 삽입 작업을 무시합니다.
- 예시:
- DB::table('posts')->insertOrIgnore([
'user_id' => 1,
'title' => 'DB 페서드를 통해 삽입 4',
'slug' => 'db-페서드를-통해-삽입-4',
// 다른 열들...
]);
- Upsert (삽입 또는 업데이트):
- upsert 메서드는 기존 레코드를 업데이트하거나 새 레코드를 삽입하는 "upsert" 작업을 수행합니다. 일치하는 열 값을 기준으로 기존 레코드를 업데이트하거나 새 레코드를 삽입합니다.
- 두 인수를 사용합니다. 삽입 또는 업데이트할 값을 나타내는 배열과 일치하는 열을 찾는 데 사용할 열 이름을 나타내는 배열입니다.
- 예시:
- DB::table('posts')->upsert(
[
'user_id' => 1,
'title' => 'X',
'slug' => 'x',
// 다른 열들...
],
['title', 'slug']
);
- 일치하는 제목 또는 슬러그를 가진 행이 이미 있으면 해당 행이 업데이트됩니다. 그렇지 않으면 새 행이 삽입됩니다.
참고] upsert의 라라벨 메뉴얼의 내용upsert 메소드는 존재하지 않는 레코드는 삽입하고 이미 존재하는 레코드는 지정한 값으로 업데이트합니다. 메소드의 첫 번째 인수는 삽입하거나 업데이트할 값으로 구성됩니다. 두 번째 인수는 연결된 테이블 내에서 레코드를 고유하게 식별할 수 있는 컬럼을 나열합니다. 메서드의 세 번째이자 마지막 인수는 일치하는 레코드가 데이터베이스에 이미 있는 경우 업데이트해야 하는 컬럼의 배열입니다.
DB::table('flights')->upsert([
['departure' => 'Oakland', 'destination' => 'San Diego', 'price' => 99],
['departure' => 'Chicago', 'destination' => 'New York', 'price' => 150]
], ['departure', 'destination'], ['price']);
위의 예제에서 라라벨은 두 개의 레코드를 삽입하려고 시도합니다. 동일한 departure 및 destination 컬럼 값을 가진 레코드가 이미 존재하는 경우 라라벨은 해당 레코드의 price 컬럼을 업데이트합니다.
{note} SQL Server를 제외한 모든 데이터베이스는 upsert 메소드의 두 번째 인수의 컬럼은 "primary" 또는 "unique" 인덱스가 있어야 합니다. 또한 MySQL 데이터베이스 드라이버는 upsert 메소드의 두 번째 인수를 무시하고 항상 테이블의 "primary" 및 "unique" 인덱스를 사용하여 기존 레코드를 감지합니다.'백엔드 > laravel' 카테고리의 다른 글
query builder 레코드 삽입, 수정, 증가/감소 메서드 설명 (0) 2024.01.14 insertGetId 사용하여 레코드를 추가하고, 추가된 ID를 획득 (0) 2024.01.14 query builder에서 select (0) 2024.01.14 seeder 로 data 를 삽입하는 방법 (2) 2024.01.13 laravel 10 모델 팩토리 사용해 test data 삽입하는 방법 (1) 2024.01.13 - 단일 행 삽입: