ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Query Builder를 사용하여 데이터를 삽입하는 방법
    백엔드/laravel 2024. 1. 14. 12:06
    1. 단일 행 삽입:
      • insert 메서드는 데이터베이스에 단일 행을 삽입하는 데 사용됩니다.
      • 키-값 쌍의 배열을 전달하며, 키는 열 이름을 나타내고 값은 삽입할 데이터를 나타냅니다.
      • 예시:
      • DB::table('posts')->insert([
            'user_id' => 1,
            'title' => 'DB 페서드를 통해 삽입됨',
            'slug' => 'db-페서드를-통해-삽입됨',
            'excerpt' => '일부 발췌문',
            'description' => '일부 설명',
            'is_published' => true,
            'minutes_to_read' => 2,
        ]);
    2. 다중 행 삽입:
      • 여러 행을 삽입하려면 insert 메서드에 배열의 배열을 전달하면 됩니다. 각 내부 배열은 별도의 행을 나타냅니다.
      • 예시:
      • DB::table('posts')->insert([
            [
                'user_id' => 1,
                'title' => 'DB 페서드를 통해 삽입 2',
                'slug' => 'db-페서드를-통해-삽입-2',
                // 다른 열들...
            ],
            [
                'user_id' => 1,
                'title' => 'DB 페서드를 통해 삽입 3',
                'slug' => 'db-페서드를-통해-삽입-3',
                // 다른 열들...
            ],
        ]);
    3. 삽입 또는 무시:
      • insertOrIgnore 메서드는 데이터가 이미 테이블에 존재하지 않을 때만 데이터를 삽입하도록 하는 데 사용됩니다. 기본 키 또는 고유 키 제약 조건과 충돌이 있는 경우 삽입 작업을 무시합니다.
      • 예시:
      • DB::table('posts')->insertOrIgnore([
            'user_id' => 1,
            'title' => 'DB 페서드를 통해 삽입 4',
            'slug' => 'db-페서드를-통해-삽입-4',
            // 다른 열들...
        ]);
    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" 인덱스를 사용하여 기존 레코드를 감지합니다.

    댓글

Designed by Tistory.