개요
이 페이지에서는 Laravel MongoDB 를 새로운 주요 버전으로 업그레이드 학습 방법을 알아볼 수 있습니다. 이 페이지에는 해당되는 경우 기능 손실 없이 Laravel 통합 버전을 업그레이드 하기 위해 애플리케이션 에서 수행해야 하는 변경 사항도 포함되어 있습니다.
업그레이드 방법
업그레이드하기 전에 다음 작업을 수행하세요:
새 라이브러리 버전이 애플리케이션 연결되는 MongoDB Server 버전 및 애플리케이션 실행되는 Laravel 버전과 호환되는지 확인하세요. 이 정보는 호환성 페이지를 참조하세요.
이 가이드 의 호환성이 손상되는 변경 섹션에서 애플리케이션 에서 현재 사용 중인 Laravel 통합 버전과 업그레이드 예정 버전 간의 호환성이 손상되는 변경을 해결하세요.
라이브러리 버전을 업그레이드하려면 애플리케이션 디렉토리에서 다음 명령을 실행합니다.
composer require mongodb/laravel-mongodb:5.8
다른 버전의 라이브러리로 업그레이드 하려면 laravel-mongodb: 뒤의 정보를 원하는 버전 번호로 바꾸세요.
호환성이 손상되는 변경
호환성이 손상되는 호환성이 손상되는 변경 은 애플리케이션 이 예상대로 작동하지 않을 수 있는 특정 버전의 Laravel 통합 규칙 또는 동작의 수정입니다.
이 섹션의 호환성이 손상되는 변경은 이를 도입한 주요 버전 릴리스별로 분류됩니다. 라이브러리 버전을 업그레이드할 때 현재 버전과 업그레이드 예정 버전 간의 호환성이 손상되는 변경을 모두 해결합니다.
버전 5.x 호환성이 손상되는 변경
이 라이브러리 버전에는 다음과 같은 호환성이 손상되는 변경이 도입되었습니다.
쿼리 빌더는 결과를 배열이 아닌
stdClass객체로 반환합니다. 이 변경 사항을 적용하려면 쿼리 결과와 상호 작용할 때 속성 액세스 에 대한 배열 액세스 를 변경해야 합니다.다음 코드는 v5.0 과 비교하여 이전 버전에서 쿼리 결과를 조회 하고 결과 객체 의 속성 에 액세스 하는 방법을 보여줍니다.
$document = DB::table('accounts') ->where('name', 'Anita Charles') ->first(); // older versions $document['balance']; // v5.0 $document->balance; 다음 클래스에 대한 지원 을 제거합니다.
MongoDB\Laravel\Auth\DatabaseTokenRepository. 대신 기본값Illuminate\Queue\Failed\DatabaseFailedJobProvider클래스를 사용하고 MongoDB 에 대한 연결을 지정합니다.MongoDB\Laravel\Queue\Failed\MongoFailedJobProvider. 대신 기본값Illuminate\Queue\Failed\DatabaseFailedJobProvider클래스를 사용하고 MongoDB 에 대한 연결을 지정합니다.
쿼리 에서
Carbon를 포함한DateTimeInterface객체 를 사용하는 경우 라이브러리는DateTimeInterface를MongoDB\BSON\UTCDateTime객체 로 변환합니다. 이 변환은where()메서드에 쿼리 필터로 전달되거나insert()및update()메서드에 데이터로 전달된DateTimeInterface객체에 적용됩니다.Carbon객체 를DB::where()메서드에 전달하는 예시 를 보려면 쿼리 빌더 가이드 의 날짜 일치 예시 섹션을 참조하세요.쿼리 결과에서 라이브러리는 기본값 시간대를 적용하여 BSON
UTCDateTime객체를Carbon날짜 클래스로 변환합니다.v5.1 에서 라이브러리는 모델 인스턴스 를 수화하기 전에
Model::raw()메서드 결과로의 변환도 수행합니다.idMongoDB 문서에서_id필드 의 별칭이며, 라이브러리는 데이터를 쿼리할 때id와(과)_id사이를 자동으로 변환합니다. 쿼리 결과 객체 에는 문서의_id필드 를 나타내는id필드 가 포함되어 있습니다. 이 동작으로 인해 문서에 두 개의 개별id및_id필드를 가질 수 없습니다.v5.1 에서 라이브러리는 모델 인스턴스 를 수화하기 전에
Model::raw()메서드 결과로의 변환도 수행합니다. 복잡한 쿼리 필터하다 를 전달할 때는Model::raw()대신DB::where()메서드를 사용합니다.v5.3부터 내장된 문서에 대해
id에서_id로의 자동 변환을 비활성화할 수 있습니다. 자세한 학습 은 연결 옵션 가이드 의 ID 필드 이름 변환 사용 비활성화 섹션을 참조하세요.$collection속성 에 대한 지원 을 제거합니다. 다음 코드는 v5.0 과 비교하여 이전 버전에서User클래스의 변수에 MongoDB 컬렉션 을 할당하는 방법을 보여줍니다.use MongoDB\Laravel\Eloquent\Model; class User extends Model { protected $keyType = 'string'; // older versions protected $collection = 'app_user'; // v5.0 protected $table = 'app_user'; ... } 이 출시하다 에서는 MongoDB 컬렉션 에 액세스하기 위해 연결된
DB및Schema메서드도 수정됩니다. 다음 코드는 v5.0 과 비교하여 이전 버전에서app_user컬렉션 에 액세스 하는 방법을 보여줍니다.use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\DB; use MongoDB\Laravel\Schema\Blueprint; // older versions Schema::collection('app_user', function (Blueprint $collection) { ... }); DB::collection('app_user')->find($id); // v5.0 Schema::table('app_user', function (Blueprint $table) { ... }); DB::table('app_user')->find($id);
버전 4.x 호환성이 손상되는 변경
이 라이브러리 버전에는 다음과 같은 호환성이 손상되는 변경이 도입되었습니다.
이제 종속성 이름은
"mongodb/laravel-mongodb"입니다.composer.json파일의 종속성 이름이"mongodb/laravel-mongodb": "^4.0"인지 확인합니다. 그런 다음composer update을(를) 실행합니다.네임스페이스는 이제
MongoDB\Laravel\입니다. 모델 및 구성 파일에서 네임스페이스를Jenssegers\Mongodb\에서MongoDB\Laravel\로 변경해야 합니다.Laravel이 아닌 프로젝트에 대한 지원을 제거합니다.
$dates속성에 대한 지원을 제거합니다. 모델 파일에서$dates의 모든 인스턴스를$casts로 변경했는지 확인합니다.Model::unset($field)변경 사항을 유지하지 않습니다.Model::save()을 사용하여Model::unset($field)에 대한 모든 호출을 따라야 합니다.Query\Builder::whereAll($column, $values)메서드를 제거합니다. 로 바꿔야Query\Builder::whereAll($column, $values)합니다.Query\Builder::where($column, 'all', $values)Query\Builder::delete()하나 또는 모든 문서를 삭제할 수 있습니다. 또는 값만 에 전달해야1합니다.nulllimit()whereDate(),whereDay(),whereMonth(),whereYear()및whereTime()메서드는 이제 날짜 필드에 MongoDB 연산자를 사용합니다.MongoDB\Laravel\Eloquent\MassPrunable트레이트를 추가합니다. 모델에서Illuminate\Database\Eloquent\MassPrunable의 모든 인스턴스를MongoDB\Laravel\Eloquent\MassPrunable(으)로 바꿔야 합니다.다음
Query\Builder메서드에 대한 지원을 제거합니다.toSql()toRawSql()whereColumn()whereFullText()groupByRaw()orderByRaw()unionAll()union()having()havingRaw()havingBetween()whereIntegerInRaw()orWhereIntegerInRaw()whereIntegerNotInRaw()orWhereIntegerNotInRaw()
지원 중단
사용 중단 알림은 향후 주요 버전에서 기능 제거될 예정임을 나타냅니다. 다음 주요 버전으로 업그레이드하기 전에 애플리케이션 의 사용 중단 알림을 해결하세요.
버전 5.8 지원 중단
Laravel MongoDB v5.8부터 Eloquent 모델 속성에 대한 array 캐스트 유형은 더 이상 사용되지 않습니다. array 을(를) 캐스트 유형으로 사용하면 속성 값이 네이티브 BSON 형식이 아닌 MongoDB 에 JSON 으로 인코딩된 문자열로 저장됩니다. array 캐스트를 사용하는 속성에 쓰기 (write) 라이브러리에서 다음과 같은 사용 중단 알림을 보냅니다.
USER DEPRECATED The "array" cast on attribute "<attribute>" of model "<Model>" stores values as a JSON-encoded string in MongoDB, which is not the native format. Remove the cast to store native BSON arrays. If you must keep JSON string storage, use the "json" cast explicitly.
사용 중단 알림에는 영향을 받는 속성 및 모델 클래스의 이름이 포함됩니다.
향후 버전을 위해 모델 속성을 마이그레이션 하려면 다음 옵션 중 하나를 사용하세요.
array캐스트를 제거합니다(권장). 캐스트 유형이 없으면 MongoDB 기본적으로 PHP 배열을 BSON 배열로 저장하고 검색합니다. 다음 코드는 모델을 업데이트 방법을 보여줍니다.// Before (deprecated in v5.8) protected $casts = [ 'options' => 'array', ]; // After: remove the cast to use native BSON storage protected $casts = [ // other casts... ]; JSON 문자열 저장 명시적으로 유지하려면
array을(를)json(으)로 바꿉니다.protected $casts = [ 'options' => 'json', ];
필드 에 이미 네이티브 BSON 배열 있고 모델이 여전히 array 캐스트를 사용하는 경우 라이브러리는 해당 배열을 올바르게 다시 읽습니다.
중요
필드 에서 array 캐스트를 제거하기 전에 필드 에 있는 기존 JSON 인코딩 문자열 값을 네이티브 BSON 배열로 마이그레이션 . 라이브러리는 기존 데이터를 자동으로 마이그레이션 하지 않습니다.