데이터베이스 및 컬렉션
이 페이지의 내용
개요
이 가이드에서는 Laravel MongoDB를 사용하여 MongoDB 데이터베이스 및 컬렉션에 액세스하고 관리하는 방법을 배울 수 있습니다.
MongoDB 는 데이터를 계층적 구조로 구성합니다. MongoDB deployment 에는 하나 이상의 데이터베이스 가 포함되며, 각 데이터베이스 에는 하나 이상의 컬렉션 이 포함됩니다. 각 컬렉션 에서 MongoDB 는 필드-값 쌍을 포함하는 문서 로 데이터를 저장합니다. Laravel 통합에서는 Eloquent 모델을 통해 문서에 액세스 할 수 있습니다.
문서 데이터 형식에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 문서 를 참조하세요.
연결 구성에서 데이터베이스 지정
애플리케이션의 config/database.php
파일에서 연결에 사용되는 데이터베이스 이름을 지정할 수 있습니다. 이 파일의 connections
속성은 모든 데이터베이스 연결 정보(예: 연결 string, 데이터베이스 이름, 인증 세부 정보(선택 사항))를 저장합니다. 데이터베이스 연결을 지정한 후에는 데이터베이스 수준 작업을 수행하고 데이터베이스에 포함된 컬렉션에 액세스할 수 있습니다.
database
속성 의 데이터베이스 이름을 존재하지 않는 데이터베이스 의 이름으로 설정하다 도 Laravel은 여전히 유효한 연결을 만듭니다. 데이터베이스 의 컬렉션 에 데이터를 삽입하면 서버 가 자동으로 생성합니다.
다음 예시 에서는 dsn
및 database
속성을 설정하다 하여 기본값 데이터베이스 연결을 설정하고 config/database.php
파일 에서 animals
데이터베이스 에 대한 데이터베이스 연결을 만드는 방법을 보여 줍니다.
'default' => 'mongodb', 'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], ... ]
기본값 데이터베이스 연결을 설정하다 하면 Laravel 통합이 작업에 해당 연결을 사용하지만 config/database.php
파일 에 여러 데이터베이스 연결을 지정할 수 있습니다.
다음 예시 에서는 animals
및 plants
데이터베이스에 액세스 하기 위해 여러 데이터베이스 연결(mongodb
및 mongodb_alt
)을 지정하는 방법을 보여 줍니다.
'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], 'mongodb_alt' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'plants', ] ], ...
참고
MongoDB PHP 운전자 는 동일한 연결 string 을 사용하여 두 개의 클라이언트를 생성할 때 동일한 연결을 재사용합니다. 두 개의 서로 다른 데이터베이스에 대해 두 개의 연결을 사용할 때 오버헤드 가 없으므로 연결을 최적화할 필요가 없습니다.
애플리케이션에 여러 데이터베이스 연결이 포함되어 있고 기본값이 아닌 데이터베이스에 모델을 저장하려는 경우 Model
클래스의 $connection
속성을 재정의합니다.
다음 예시 에서는 mongodb_alt
연결을 사용하도록 Flower
모델 클래스의 $connection
속성 을 재정의하는 방법을 보여 줍니다. 이렇게 하면 Laravel 통합이 기본값 데이터베이스 대신 plants
데이터베이스 의 flowers
컬렉션 에 모델을 저장 하도록 지시합니다.
class Flower extends Model { protected $connection = 'mongodb_alt'; }
컬렉션에 액세스
MongoDB\Laravel\Eloquent\Model
을(를) 확장하는 모델 클래스를 생성하면 Laravel 통합은 모델 클래스 이름의 스네이크 복수형으로 형식이 지정된 이름의 컬렉션 에 모델 데이터를 저장합니다.
예를 들어 Flower
이라는 모델 클래스를 생성하면 Laravel은 데이터베이스의 flowers
컬렉션에 모델을 적용합니다.
팁
모델 클래스에서 다른 컬렉션 이름을 지정하는 방법을 학습 보려면 Eloquent 모델 클래스 가이드 의 모델 컬렉션 이름 변경 섹션을 참조하세요.
일반적으로 코드 가독성과 유지 관리 용이성을 위해 Eloquent ORM을 사용하여 컬렉션에 액세스할 것을 권장합니다. 다음 예제에서는 Flower
클래스를 사용하여 찾기 작업을 지정하여 Laravel이 flowers
컬렉션에서 결과를 검색할 수 있도록 합니다.
Flower::where('name', 'Water Lily')->get()
참고
Laravel 통합 v4.8 부터 DB::collection()
메서드는 더 이상 사용되지 않습니다. 다음 예시 와 같이 DB::table()
메서드를 사용하여 MongoDB 컬렉션 에 액세스 수 있습니다.
Eloquent 모델을 사용하여 작업을 수행할 수 없는 경우 DB
파사드에서 table()
메서드를 호출하여 쿼리 빌더에 액세스할 수 있습니다. 다음 예제에서는 이전 예제와 동일한 쿼리를 보여 주지만 쿼리는 DB::table()
메서드를 사용하여 구성됩니다.
DB::connection('mongodb') ->table('flowers') ->where('name', 'Water Lily') ->get()
listCollections (영문)
다음 조치 중 하나를 수행하여 데이터베이스 의 컬렉션에 대한 정보를 볼 수 있습니다.
shell 명령 실행
프로젝트의 루트 디렉토리 에 있는 shell 에서 다음 명령을 실행 하여 데이터베이스 의 컬렉션을 나열할 수 있습니다.
php artisan db:show
이 명령은 구성된 데이터베이스 에 대한 정보를 출력하고 Table
헤더 아래에 해당 컬렉션을 나열합니다.db:show
명령에 대한 자세한 내용은 Laravel: 새 DB 명령 을 참조하세요. 공식 Laravel 블로그.
데이터베이스 또는 스키마 메서드 호출
애플리케이션 에서 다음 메서드를 호출하여 데이터베이스 의 컬렉션을 나열할 수 있습니다.
DB::listCollections()
: 쿼리 빌더를 사용하여 각 컬렉션 에 대한 정보를 나열합니다.Schema::getTablesListing()
: 스키마 빌더를 사용하여 각 컬렉션 의 이름을 나열합니다.Schema::getTables()
: 스키마 빌더를 사용하여 각 컬렉션 의 이름과 크기를 나열합니다.
참고
MongoDB 는 스키마가 없는 데이터베이스 이므로 앞의 스키마 빌더 메서드는 스키마 가 아닌 데이터베이스 데이터를 쿼리 합니다.
예시
다음 예시 에서는 데이터베이스 연결에 액세스한 다음 listCollections()
쿼리 빌더 메서드를 호출하여 데이터베이스 의 컬렉션에 대한 정보를 조회 합니다.
$collections = DB::connection('mongodb')->getMongoDB()->listCollections();
컬렉션 필드 나열
다음 작업 중 하나를 수행하여 컬렉션 의 각 필드 에 대한 정보를 볼 수 있습니다.
shell 명령 실행
프로젝트의 루트 디렉토리 에 있는 shell 에서 다음 명령을 실행 하여 컬렉션 의 필드 목록을 볼 수 있습니다.
php artisan db:table <collection name>
이 명령은 각 컬렉션 필드 와 해당 데이터 유형 을 Column
헤더 아래에 출력합니다. 명령에 대한 자세한 내용은 db:table
Laravel: 새 DB 명령 을 참조하세요. 공식 Laravel 블로그.
스키마 메서드 호출
애플리케이션 에서 Schema::getColumns()
스키마 빌더 메서드를 호출하여 컬렉션 의 필드를 나열할 수 있습니다.
다음 메서드를 사용하여 컬렉션 필드에 대한 자세한 정보를 반환할 수도 있습니다.
Schema::hasColumn(string $<collection>, string $<field name>)
: 지정된 필드 가 하나 이상의 문서 에 존재하는지 확인합니다.Schema::hasColumns(string $<collection>, string[] $<field names>)
: 지정된 각 필드 가 하나 이상의 문서 에 존재하는지 확인합니다.
MongoDB 는 스키마가 없는 데이터베이스 이므로 앞의 메서드는 데이터베이스 스키마 가 아닌 컬렉션 데이터를 쿼리 합니다. 지정된 컬렉션 이 존재하지 않거나 비어 있는 경우 이러한 메서드는 false
값을 반환합니다.
참고
id Alias
Laravel MongoDB v5.1 부터, getColumns()
메서드는 MongoDB 컬렉션 의 _id
필드 이름을 반환된 필드 이름 목록에서 별칭 id
로 나타냅니다. _id
또는 id
를 hasColumn()
및 hasColumns()
메서드에 전달할 수 있습니다.
예시
다음 예시 에서는 컬렉션 이름을 Schema::getColumns()
메서드에 전달하여 flowers
컬렉션 의 각 필드 를 조회 합니다.
$fields = Schema::getColumns('flowers');
컬렉션 생성 및 삭제
컬렉션을 생성하고 삭제하는 방법을 알아보려면 스키마 빌더 가이드의 Laravel 마이그레이션 수행 섹션을 참조하세요.