Overview
このページでは、Lambda MongoDB を新しいメジャー バージョンにアップグレードする方法を学びます。 このページには、該当する場合、機能を失うことなく Lambda 統合のバージョンをアップグレードするためにアプリケーションに加える必要がある変更も含まれています。
アップグレード方法
アップグレードする前に、次のアクションを実行してください。
新しいライブラリのバージョンが、アプリケーションが接続するMongoDB Server のバージョン、およびアプリケーションを実行する Lambda のバージョンと互換性があることを確認します。この情報については、 の互換性 ページを参照してください。
このガイドの「 重大な変更 」セクションで、アプリケーションが現在使用している Lambda 統合のバージョンと計画されているアップグレード バージョンとの間の重大な変更に対処します。
ライブラリのバージョンをアップグレードするには、アプリケーションの ディレクトリで次のコマンドを実行します。
composer require mongodb/laravel-mongodb:5.5
ライブラリの別のバージョンにアップグレードするには、 laravel-mongodb:の後の情報をご希望のバージョン番号に置き換えます。
重大な変更
重大な変更とは、アプリケーションが期待どおりに動作するのを妨げる可能性のある Lambda 統合の特定のバージョンにおける 規則 または 動作の変更です。
このセクションの重大な変更は、それを導入したメジャー バージョン リリースによって分類されます。 ライブラリのバージョンをアップグレードするときは、現在のバージョンと計画されているアップグレード バージョン間のすべての重大な変更に対処してください。
バージョン 5.x での重大な変更
このライブラリ バージョンでは、次の重大な変更が導入されています。
クエリ ビルダでは、配列ではなく
stdClassオブジェクトとして結果が返されます。この変更では、クエリ結果を操作するときに、配列アクセスをプロパティアクセスに変更する必要があります。次のコードは、クエリ結果を検索し、v 5.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オブジェクトに変換します。 この変換は、クエリフィルターとしてDateTimeInterfacewhere()メソッドに渡される、または メソッドと メソッドに渡されるデータとして、insert()update()オブジェクトに適用されます。CarbonオブジェクトをDB::where()メソッドに渡す例については、 クエリ ビルダガイドの「 一致日付の例 」セクションを参照してください。クエリ結果では、ライブラリは BSON
UTCDateTimeオブジェクトをCarbon日付クラスに変換し、デフォルトのタイムゾーンを適用します。v 5.1 では、ライブラリは モデルインスタンスを一時停止する前に、
Model::raw()メソッドの結果へのこの変換も実行します。idは、MongoDB ドキュメントの_idフィールドのエイリアスであり、ライブラリはデータのクエリ時にidと_idの間を自動的に変換します。 クエリ結果オブジェクトには、ドキュメントの_idフィールドを表すidフィールドが含まれています。 この動作のため、ドキュメント内にidと_idの 2 つの個別のフィールドを含めることはできません。v 5.1 では、ライブラリは モデルインスタンスを一時停止する前に、
Model::raw()メソッドの結果へのこの変換も実行します。複雑なクエリフィルターを渡す場合は、Model::raw()ではなくDB::where()メソッドを使用します。v5.3 以降、埋め込みドキュメントの
idから_idへの自動変換を無効にできます。詳細については、 接続オプションガイドの「IDフィールド名変換の使用の無効化」セクションを参照してください。$collectionプロパティのサポートを廃止します。 次のコードは、v 5.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'; ... } DBSchemaこのリリースでは、MongoDB コレクションにアクセスするための関連する メソッドと メソッドも変更されます。次のコードは、v 5.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 の重大な変更
このライブラリ バージョンでは、次の重大な変更が導入されています。
Lambda の最小バージョンは 10.0 になりました。Lambel のバージョンをアップグレードする手順については、Lambel ドキュメントの「 アップグレード ガイド 」を参照してください。
依存関係名が
"mongodb/laravel-mongodb"になりました。composer.jsonファイル内の依存関係名が"mongodb/laravel-mongodb": "^4.0"であることを確認します。 次に、composer updateを実行します。名前空間は
MongoDB\Laravel\になりました。 モデルと構成ファイルで、名前空間がJenssegers\Mongodb\からMongoDB\Laravel\に変更されていることを確認してください。Lambda 以外のプロジェクトのサポートを廃止します。
$datesプロパティのサポートを廃止します。 モデル ファイルで、$datesのすべてのインスタンスを$castsに変更していることを確認します。Model::unset($field)は変更を保持しません。Model::unset($field)を使用してModel::save()へのすべての呼び出しに従うようにしてください。Query\Builder::whereAll($column, $values)メソッドを削除します。Query\Builder::whereAll($column, $values)へのすべての呼び出しをQuery\Builder::where($column, 'all', $values)に置き換えてください。Query\Builder::delete()は、1 つまたはすべてのドキュメントを削除できます。1またはnullの値のみをlimit()に渡すようにしてください。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()