スキーマビルダ
項目一覧
Overview
Lambda は、テーブルを作成および変更するスキーマ ビルダ クラス Schema
にアクセスするためのファサードを提供します。 ファジーは、構文をより簡潔にし、テスト可能性を向上させるクラスへの静的インターフェースです。
Lambda 統合は、Lambda Schema
ファサードのインデックスとコレクション管理メソッドのサブセットをサポートします。
ファサードの詳細については、Lambel ドキュメントの ファサード を参照してください。
次のセクションでは、Laravel 統合で使用できる Lambda スキーマ ビルダの機能について説明し、その使用方法の例を示します。
注意
Lambda 統合はインデックスとコレクションの管理をサポートしていますが、データ検証用の MongoDB JSON スキーマのサポートは除外されています。 JSON schema 検証の詳細については、サーバー マニュアルの「スキーマ検証」を参照してください。
ラベル移行の実行
Lambda 移行では、 Schema
ファサードに含まれるメソッドを実行して、データベース スキーマをプログラムで作成、変更、削除できます。 次のセクションでは、MongoDB database を使用する場合に移行クラスを認可する方法と、その実行方法について説明します。
移行内からデータベースとコレクションを変更することで、アプリケーションの整合性、バージョン管理、元に戻すことが可能になる制御されたアプローチが提供されます。
移行クラスを作成する
移行クラスは手動で作成することも、 php artisan make:migration
コマンドを使用して生成することもできます。 これらを生成する場合、MongoDB database でスキーマの変更を実行するために次の変更を行う必要があります。
移行で参照されている場合は、
Illuminate\Database\Schema\Blueprint
インポートをMongoDB\Laravel\Schema\Blueprint
に置き換えLambda 統合でサポートされているコマンドと構文のみを使用
Tip
デフォルトのデータベース接続が MongoDB database 以外に設定されている場合は、次の設定を更新して、移行で正しいデータベースが指定されていることを確認してください。
connections
配列項目にconfig/database.php
ファイルに有効なmongodb
エントリが含まれていることを確認します移行クラスの
$connection
フィールドに"mongodb"
を指定する
次のサンプル移行クラスには、次のメソッドが含まれています。
up()
は、移行を実行するとコレクションとインデックスを作成します。down()
は、移行をロールバックしたときにコレクションとその上のすべてのインデックスを削除します。
declare(strict_types=1); use Illuminate\Database\Migrations\Migration; use Illuminate\Support\Facades\Schema; use MongoDB\Laravel\Schema\Blueprint; return new class extends Migration { protected $connection = 'mongodb'; /** * Run the migrations. */ public function up(): void { Schema::create('astronauts', function (Blueprint $collection) { $collection->index('name'); }); } /** * Reverse the migrations. */ public function down(): void { Schema::drop('astronauts'); } };
移行の実行またはロールバック
クラス ファイルからデータベース移行を実行するには、 プレースホルダーを置き換えた後に次のコマンドを実行します。
php artisan migrate --path=<path to your migration class file>
このコマンドは、クラス ファイル内のup()
関数を実行して、 config/database.php
ファイルで指定されたデータベースにコレクションとインデックスを作成します。
移行をロールバックするには、 プレースホルダーを置き換えた後に次のコマンドを実行します。
php artisan migrate:rollback --path=<path to your migration class file>
このコマンドは、クラスファイルでdown()
関数を実行して、コレクションと関連インデックスを削除します。
Lambda の移行の詳細については、「 データベース: 移行 」を参照してください。 Lambda のドキュメント。
コレクションが存在するかどうかの確認
コレクションが存在するかどうかを確認するには、移行ファイル内のSchema
ファケイドでhasCollection()
メソッドを呼び出します。 これを使用して、条件付きで移行ロジックを実行できます。
次の移行例では、 stars
という名前のコレクションが存在する場合にtelescopes
コレクションを作成します。
$hasCollection = Schema::hasCollection('stars'); if ($hasCollection) { Schema::create('telescopes'); }
インデックスの管理
MongoDB インデックスは、クエリ結果の検索に必要なドキュメント数を減らし、クエリの効率を向上させるデータ構造です。 地理空間インデックスなどの特定のインデックスは、データのクエリ方法を拡張します。
インデックスを使用してクエリのパフォーマンスを向上させるには、インデックスがクエリを カバー することを確認してください。 インデックスとクエリの最適化の詳細については、次のサーバー マニュアル エントリを参照してください。
次のセクションでは、スキーマ ビルダを使用してコレクションのさまざまなタイプのインデックスを作成および削除する方法を示します。
インデックスの作成
インデックスを作成するには、移行ファイルのSchema
ファサードでcreate()
メソッドを呼び出します。 これに、コレクション名とコールバック メソッドをMongoDB\Laravel\Schema\Blueprint
パラメーターとともに渡します。 Blueprint
インスタンスでのインデックス作成の詳細を指定します。
次の移行例では、次のコレクション フィールドにインデックスが作成されます。
単一フィールド インデックスのオン
mission_type
launch_location
とlaunch_date
の複合インデックス、launch_date
で降順の並べ替え順序を指定インデックス名
"unique_mission_id_idx"
を指定するmission_id
フィールドの一意のインデックス
[ VIEW OUTPUTボタンをクリックすると、 _id
フィールドのデフォルト インデックスを含む、移行の実行によって作成されたインデックスが表示されます。
Schema::create('flights', function (Blueprint $collection) { $collection->index('mission_type'); $collection->index(['launch_location' => 1, 'launch_date' => -1]); $collection->unique('mission_id', options: ['name' => 'unique_mission_id_idx']); });
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { mission_type: 1 }, name: 'mission_type_1' }, { v: 2, key: { launch_location: 1, launch_date: -1 }, name: 'launch_location_1_launch_date_-1' }, { v: 2, key: { mission_id: 1 }, name: 'unique_mission_id_idx', unique: true } ]
インデックス オプションの指定
MongoDB インデックス オプションによって、インデックスの使用方法と保存方法が決まります。 Blueprint
インスタンスでindex()
などのインデックス作成メソッドを呼び出すときにインデックス オプションを指定できます。
次の移行コードは、インデックス オプションとしてインデックスに照合を追加する方法を示しています。 [ VIEW OUTPUTボタンをクリックすると、 _id
フィールドのデフォルト インデックスを含む、移行を実行することによって作成されたインデックスが表示されます。
Schema::create('passengers', function (Blueprint $collection) { $collection->index( 'last_name', name: 'passengers_collation_idx', options: [ 'collation' => [ 'locale' => 'de@collation=phonebook', 'numericOrdering' => true ], ], ); });
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { last_name: 1 }, name: 'passengers_collation_idx', collation: { locale: 'de@collation=phonebook', caseLevel: false, caseFirst: 'off', strength: 3, numericOrdering: true, alternate: 'non-ignorable', maxVariable: 'punct', normalization: false, backwards: false, version: '57.1' } } ]
インデックス オプションの詳細については、サーバー マニュアルの「すべてのインデックス タイプのオプション 」を参照してください。
スパース、TTL、一意のインデックスの作成
Lambda MongoDB ヘルパー メソッドを使用して、次のタイプのインデックスを作成できます。
スパース インデックス。指定されたフィールドを含むドキュメントのみにインデックスエントリを許可します。
Time-to-Live(TTL)インデックスは一定時間の経過後に期限切れになります
一意なインデックス 。インデックス フィールドに重複する値を含むドキュメントの挿入を防止します
これらのインデックス タイプを作成するには、移行ファイルのSchema
ファサードでcreate()
メソッドを呼び出します。 create()
にコレクション名と、 MongoDB\Laravel\Schema\Blueprint
パラメータを指定したコールバック メソッドを渡します。 Blueprint
インスタンスで適切なヘルパー メソッドを呼び出し、インデックス作成の詳細を渡します。
次の移行コードは、インデックス ヘルパーを使用してスパース インデックスと TTL インデックスを作成する方法を示しています。 [ VIEW OUTPUTボタンをクリックすると、 _id
フィールドのデフォルト インデックスを含む、移行を実行することによって作成されたインデックスが表示されます。
Schema::create('planets', function (Blueprint $collection) { $collection->sparse('rings'); $collection->expire('last_visible_dt', 86400); });
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { rings: 1 }, name: 'rings_1', sparse: true }, { v: 2, key: { last_visible_dt: 1 }, name: 'last_visible_dt_1', expireAfterSeconds: 86400 } ]
スパース インデックス、TTL インデックス、ユニーク インデックスは、インデックス オプションで指定することで、単一フィールドまたは複合インデックスで指定できます。
次の移行コードは、1 つのフィールドに 3 種類のインデックスすべてを作成する方法を示しています。 [ VIEW OUTPUTボタンをクリックすると、 _id
フィールドのデフォルト インデックスを含む、移行を実行することによって作成されたインデックスが表示されます。
Schema::create('planet_systems', function (Blueprint $collection) { $collection->index('last_visible_dt', options: ['sparse' => true, 'expireAfterSeconds' => 3600, 'unique' => true]); });
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { last_visible_dt: 1 }, name: 'last_visible_dt_1', unique: true, sparse: true, expireAfterSeconds: 3600 } ]
これらのインデックスの詳細については、サーバー マニュアルの「インデックス プロパティ」を参照してください。
地理空間インデックスの作成
MongoDB では、 地理空間インデックス を使用して、包含、交差、近接性について地理空間座標データを照会できます。
地理空間インデックスを作成するには、移行ファイルのSchema
ファサードでcreate()
メソッドを呼び出します。 create()
にコレクション名と、 MongoDB\Laravel\Schema\Blueprint
パラメータを指定したコールバック メソッドを渡します。 Blueprint
インスタンスで地理空間インデックスの作成の詳細を指定します。
次の移行例では、 spaceports
コレクションに2d
と2dsphere
の地理空間インデックスを作成します。 [ VIEW OUTPUT ] ボタンをクリックすると、 _id
フィールドのデフォルト インデックスを含む、移行の実行によって作成されたインデックスが表示されます。
Schema::create('spaceports', function (Blueprint $collection) { $collection->geospatial('launchpad_location', '2dsphere'); $collection->geospatial('runway_location', '2d'); });
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { launchpad_location: '2dsphere' }, name: 'launchpad_location_2dsphere', '2dsphereIndexVersion': 3 }, { v: 2, key: { runway_location: '2d' }, name: 'runway_location_2d' } ]
地理空間インデックスの詳細については、サーバー マニュアルの「地理空間インデックス 」を参照してください。
インデックスの削除
コレクションからインデックスを削除するには、移行ファイルのSchema
ファサードでtable()
メソッドを呼び出します。 これに、テーブル名とコールバック メソッドをMongoDB\Laravel\Schema\Blueprint
パラメーターとともに渡します。 Blueprint
インスタンスでインデックス名を指定してdropIndex()
メソッドを呼び出します。
注意
コレクションを削除すると、MongoDB はそれに関連付けられているすべてのインデックスを自動的に削除します。
次の移行例では、 flights
コレクションからunique_mission_id_idx
というインデックスを削除します。
Schema::table('flights', function (Blueprint $collection) { $collection->dropIndex('unique_mission_id_idx'); });