Overview
このページでは、Lambda MongoDB を新しいメジャー バージョンにアップグレードする方法を学びます。 このページには、該当する場合、機能を失うことなく Lambda 統合のバージョンをアップグレードするためにアプリケーションに加える必要がある変更も含まれています。
アップグレード方法
アップグレードする前に、次のアクションを実行してください。
新しいライブラリのバージョンが、アプリケーションが接続するMongoDB Serverのバージョン、およびアプリケーションを実行するLaravelのバージョンと互換性があることを確認します。この情報については、互換性ページを参照してください。
このガイドの「 重大な変更 」セクションで、アプリケーションが現在使用している Lambda 統合のバージョンと計画されているアップグレード バージョンとの間の重大な変更に対処します。
このガイドの「非推奨」セクションで、現行バージョンの非推奨通知に対処します。
ライブラリのバージョンをアップグレードするには、アプリケーションの ディレクトリで次のコマンドを実行します。
composer require mongodb/laravel-mongodb:5.12ライブラリの別のバージョンにアップグレードするには、 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 versionsSchema::collection('app_user', function (Blueprint $collection) { ... });DB::collection('app_user')->find($id); // v5.0Schema::table('app_user', function (Blueprint $table) { ... });DB::table('app_user')->find($id);v5.9以降、最小Laravelバージョンは12.0になります。Laravel バージョンのアップグレード手順については、Laravel ドキュメントの「アップグレード ガイド」を参照してください。
v5.9以降、PHPの最小バージョンは8.2になります。アップグレードする前に、アプリケーションがサポートされているバージョンのPHPで実行されていることを確認してください。
v5.11以降、
where()メソッドは、以下の条件下で配列の値をリテラル値として解釈します。where()メソッドには 3 個の引数を渡します。その引数の1つが
=演算子です。もう一つの引数は配列の値です。
以前のバージョンでは、Laravel Integrationは配列を演算子ドキュメントとしてMongoDBに渡していましたが、これにより意図しないクエリ条件が挿入される可能性がありました。詳しく学ぶには、クエリビルダガイドの「配列値」と、関連する「CVE-2026-88022 issue.」を参照してください。
v5.12以降、
prefix接続設定は、Laravelと同様に、ライブラリのスキーマビルダのスキーマメソッドに適用されます。hasTable()、dropIfExists()、getColumns()、およびgetIndexes()メソッドは、渡されたコレクション名にプレフィックスを適用するようになりました。getColumnListing()、getIndexListing()、およびhasIndex()にも同じことが適用され、これらはgetColumns()およびgetIndexes()に委譲されます。この設定についてさらに学ぶには、Laravelデータベース接続構成を参照してください。アプリケーションがこれらのメソッドにプレフィックス付きのコレクション名を渡す場合は、代わりにプレフィックスなしの名前を渡してください。例として、接続で
app_のprefixを使用している場合は、Schema::hasTable('app_users')ではなくSchema::hasTable('users')を呼び出します。hasCollection()getCollection()これらはLaravelのスキーマAPIの一部ではありません。これらはMongoDBに保存されているコレクション名をそのまま受け取るため、メソッドはプレフィックス付きの名前を使用できます。このリリースでは、移行に関する問題も修正されています。v5.12より前では、プレフィックス付きの
php artisan migrateは、実行のたびに移行リポジトリを再作成し、すべての移行を再度実行します。
バージョン 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非推奨
Laravel MongoDB v5.8 以降、Eloquent モデル属性の array キャスト型は非推奨になります。array をキャスト型として使用すると、属性値は MongoDB に JSON エンコードされた文字列として保存されますが、これはネイティブな BSON 形式ではありません。array キャストを使用する属性に書き込みを行うと、ライブラリは次の非推奨の通知を発行します。
USER DEPRECATED The "array" cast on attribute "<attribute>"of model "<Model>" stores values as a JSON-encoded string inMongoDB, which is not the native format. Remove the cast tostore native BSON arrays. If you must keep JSON stringstorage, 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 storageprotected $casts = [ // other casts...];JSON string ストレージを明示的に維持するには、
arrayをjsonに置き換えます。protected $casts = [ 'options' => 'json',];
フィールドにネイティブ BSON 配列が既に保持されていて、モデルが array キャストを使用している場合でも、ライブラリは正しく読み取ります。
重要
フィールドから array キャストを除去する前に、フィールド内の既存の JSON エンコードされた string 値をネイティブ BSON 配列に移行します。ライブラリは既存のデータを自動的に移行しません。