개요
이 가이드 에서는 Laravel MongoDB 사용하여 Laravel 애플리케이션 에서 MongoDB 컬렉션에 문서를 삽입하는 방법을 학습 수 있습니다.
문서를 삽입할 때 데이터가 컬렉션의 고유 인덱스를 위반하지 않는지 확인하세요. 컬렉션의 첫 번째 문서를 삽입하거나 새 컬렉션을 만들 때 MongoDB는 _id 필드에 고유 인덱스를 자동으로 생성합니다.
Laravel 스키마 빌더를 사용하여 MongoDB 컬렉션에서 인덱스를 생성하는 방법에 대한 자세한 내용은 스키마 빌더 설명서의 인덱스 관리 섹션을 참조하세요.
Laravel 통합의 Eloquent 모델에 대해 자세히 학습 데이터 모델링하기 섹션을 참조하세요.
샘플 모델
이 가이드 의 작업은 다음 Eloquent 모델 클래스를 참조합니다:
namespace App\Models; use MongoDB\Laravel\Eloquent\Model; class Concert extends Model { protected $connection = 'mongodb'; protected $fillable = ['performer', 'venue', 'genres', 'ticketsSold', 'performanceDate']; protected $casts = ['performanceDate' => 'datetime']; }
팁
$fillable 속성을 사용하면 삽입 작업에 Laravel 대량 할당을 사용할 수 있습니다. 대량 할당에 학습 보려면 Eloquent 모델 클래스 문서에서 대량 할당 사용자 지정 을 참조하세요.
$casts 속성은 속성을 일반적인 데이터 유형으로 변환하도록 Laravel에 지시합니다. 자세히 학습 Laravel 문서에서 속성 캐스팅을 참조하세요.
문서 하나 삽입
이 섹션의 예제에서는 save() 및 create() Eloquent 메서드를 사용하여 Concert 모델의 인스턴스 MongoDB 문서 로 삽입하는 방법을 보여 줍니다.
save() 메서드
save() 메서드가 성공하면 메서드를 호출한 모델 인스턴스 에 액세스 할 수 있습니다.
작업이 실패하면 모델 인스턴스 에 null 이 할당됩니다.
이 예제 코드는 다음 작업을 수행합니다.
Concert모델의 새 인스턴스를 만듭니다.performer및venue필드에 string 값을 할당합니다.genre필드에 문자열 배열을 할당합니다.ticketsSold필드 에 숫자를 할당합니다.Carbon패키지를 사용하여performanceDate필드에 날짜를 할당합니다.save()메서드를 호출하여 문서를 삽입합니다.
$concert = new Concert(); $concert->performer = 'Mitsuko Uchida'; $concert->venue = 'Carnegie Hall'; $concert->genres = ['classical']; $concert->ticketsSold = 2121; $concert->performanceDate = Carbon::create(2024, 4, 1, 20, 0, 0, 'EST'); $concert->save();
다음 코드 예제와 같이 모델의 id 멤버에 액세스하여 삽입된 문서의 _id 값을 검색할 수 있습니다.
$insertedId = $concert->id;
create() 메서드
$fillable 또는 $guarded 속성을 정의하여 대량 할당을 활성화하는 경우, 다음 예와 같이 Eloquent 모델 create() 메서드를 사용하여 한 번의 호출로 삽입을 수행할 수 있습니다.
$insertResult = Concert::create([ 'performer' => 'The Rolling Stones', 'venue' => 'Soldier Field', 'genres' => [ 'rock', 'pop', 'blues' ], 'ticketsSold' => 59527, 'performanceDate' => Carbon::create(2024, 6, 30, 20, 0, 0, 'CDT'), ]);
여러 문서를 삽입합니다.
이 예시 에서는 insert() Eloquent 메서드를 사용하여 Concert 모델의 여러 인스턴스를 MongoDB 문서로 삽입하는 방법을 보여 줍니다. 이 대량 삽입 메서드를 사용하면 애플리케이션 에서 문서를 저장하기 위해 수행해야 하는 호출 횟수를 줄일 수 있습니다.
insert() 메서드가 성공하면 true 값을 반환합니다. 실패하면 예외가 발생합니다.
다음 예시 에서는 여러 모델을 insert() 메서드에 배열 로 전달하여 한 번의 호출로 저장합니다.
$data = [ [ 'performer' => 'Brad Mehldau', 'venue' => 'Philharmonie de Paris', 'genres' => [ 'jazz', 'post-bop' ], 'ticketsSold' => 5745, 'performanceDate' => new UTCDateTime(Carbon::create(2025, 2, 12, 20, 0, 0, 'CET')), ], [ 'performer' => 'Billy Joel', 'venue' => 'Madison Square Garden', 'genres' => [ 'rock', 'soft rock', 'pop rock' ], 'ticketsSold' => 12852, 'performanceDate' => new UTCDateTime(Carbon::create(2025, 2, 12, 20, 0, 0, 'CET')), ], ]; Concert::insert($data);
참고
이 예시 Laravel이 대량 삽입 작업에서 속성 캐스팅을 건너뛰기 때문에 MongoDB\BSON\UTCDateTime 클래스의 날짜를 래핑하여 MongoDB 직렬화할 수 있는 유형으로 변환합니다.
완전 실행 가능한 예시
다음 섹션에서는 Laravel 통합을 사용하여 문서를 삽입하는 방법을 보여주는 완전히 실행 가능한 코드 예제를 제공합니다. 이 예제에서는 sample_mflix.movies Atlas 샘플 데이터 세트의 컬렉션 사용합니다.
팁
전체 예제는 자체 Laravel 애플리케이션 또는 my-app 시작하기 튜토리얼에서 만든 애플리케이션 에서 실행 수 있습니다. 예제에서는 Movie.php 이 튜토리얼에서 만든 모델 클래스를 사용하여 movies MongoDB 컬렉션 에 대한 작업을 시연합니다. 작업을 실행 하려면 샘플 코드를 Laravel 애플리케이션 의 컨트롤러 엔드포인트에 복사하면 됩니다.
작업의 예상 출력을 보려면 컨트롤러 함수를 호출하고 결과를 웹 인터페이스에 반환하는 웹 경로를 애플리케이션 에 추가하면 됩니다.
문서 삽입
다음 Eloquent 및 Query Builder 탭에서 선택하여 각 쿼리 구문에 대한 예제를 볼 수 있습니다.
이 예에서는 다음 조치를 수행합니다.
MovieEloquent 모델을 사용하여sample_mflix데이터베이스의movies컬렉션을 나타냅니다.movies컬렉션에 문서를 삽입합니다.새로 삽입된 문서 인쇄합니다.
이 예시 create() 메서드를 호출하여 다음 필드와 값이 포함된 문서 삽입합니다.
title값"Marriage Story"year값2019runtime값136
$movie = Movie::create([ 'title' => 'Marriage Story', 'year' => 2019, 'runtime' => 136, ]); echo $movie->toJson();
{ "title": "Marriage Story", "year": 2019, "runtime": 136, "updated_at": "...", "created_at": "...", "_id": "..." }
이 예에서는 다음 조치를 수행합니다.
DB파사드에서table()메서드를 호출하여movies컬렉션 에 액세스합니다.movies컬렉션에 문서를 삽입합니다.삽입 작업의 성공 여부를 출력합니다.
이 예시 insert() 메서드를 호출하여 다음 필드와 값이 포함된 문서 삽입합니다.
title값"Marriage Story"year값2019runtime값136
$success = DB::table('movies') ->insert([ 'title' => 'Marriage Story', 'year' => 2019, 'runtime' => 136, ]); echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes
여러 문서를 삽입합니다.
다음 Eloquent 및 Query Builder 탭에서 선택하여 각 쿼리 구문에 대한 예제를 볼 수 있습니다.
이 예에서는 다음 조치를 수행합니다.
MovieEloquent 모델을 사용하여sample_mflix데이터베이스의movies컬렉션을 나타냅니다.movies컬렉션에 문서를 삽입합니다.삽입 작업의 성공 여부를 출력합니다.
이 예시 insert() 메서드를 호출하여 2023에 개봉된 영화를 나타내는 문서를 삽입합니다.
$success = Movie::insert([ [ 'title' => 'Anatomy of a Fall', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-08-23')), ], [ 'title' => 'The Boy and the Heron', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-12-08')), ], [ 'title' => 'Passages', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-06-28')), ], ]); echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes
이 예에서는 다음 조치를 수행합니다.
DB파사드에서table()메서드를 호출하여movies컬렉션 에 액세스합니다.movies컬렉션에 문서를 삽입합니다.삽입 작업의 성공 여부를 출력합니다.
이 예시 insert() 메서드를 호출하여 2023에 개봉된 영화를 나타내는 문서를 삽입합니다.
$success = DB::table('movies') ->insert([ [ 'title' => 'Anatomy of a Fall', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-08-23')), ], [ 'title' => 'The Boy and the Heron', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-12-08')), ], [ 'title' => 'Passages', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-06-28')), ], ]); echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes
추가 정보
탄소 PHP API 확장에 대해 자세히 학습하려면 탄소 Github 리포지토리 참조하세요.