Overview
このページでは、Lambda MongoDB を新しいメジャー バージョンにアップグレードする方法を学びます。 このページには、該当する場合、機能を失うことなく Lambda 統合のバージョンをアップグレードするためにアプリケーションに加える必要がある変更も含まれています。
アップグレード方法
アップグレードする前に、次のアクションを実行してください。
新しいライブラリのバージョンが、アプリケーションが接続するMongoDB Serverのバージョン、およびアプリケーションを実行するLaravelのバージョンと互換性があることを確認します。この情報については、互換性ページを参照してください。
このガイドの「 重大な変更 」セクションで、アプリケーションが現在使用している Lambda 統合のバージョンと計画されているアップグレード バージョンとの間の重大な変更に対処します。
ライブラリのバージョンをアップグレードするには、アプリケーションの ディレクトリで次のコマンドを実行します。
composer require mongodb/laravel-mongodb:5.8
ライブラリの別のバージョンにアップグレードするには、 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()
非推奨
非推奨通知は、将来のメジャー バージョンで機能が削除される予定があることを示します。次のメジャー バージョンにアップグレードする前に、アプリケーション内の非推奨の通知に対処します。
バージョン 5.8非推奨
Lambda MongoDB v5.8 以降では、Eloqueent モデル属性の array キャスト タイプは非推奨になります。キャスト タイプとして array を使用すると、ネイティブBSON形式ではないMongoDBにJSONでエンコードされた文字列として属性値が保存されます。 array キャストを使用する属性に書き込むと、ライブラリは次の非推奨通知を発行します。
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 stringストレージ を明示的に保持するには、
arrayをjsonに置き換えます。protected $casts = [ 'options' => 'json', ];
フィールドがすでにネイティブBSON配列を保持しており、モデルが引き続き array キャストを使用している場合、ライブラリはそれを正しく読み取ります。
重要
フィールドからキャストされた array を削除する前に、フィールド内の既存のJSONでエンコードされた文字列の値をネイティブBSON配列に移行します。ライブラリは既存のデータを自動的に移行しません。