エンティティファイルの #[ORM\Index(fields: ['fieldName'] ] 属性を使用してデータベースインデックスを作成できます。残りのインデックスの管理は Doctrine が行いますが、それについては話しません
。プロジェクトが成長したり、特定の要件が必要になったりすると、GIST、GIN、BRIN などのカスタム インデックス タイプの使用が必要になる場合があります (https://www.postgresql.org/docs/current/indexes-types.html)。 Doctrine は、すぐに使えるデータベースベンダー固有のインデックスタイプの作成をサポートしていません (ref)。
この問題に取り組むには、CREATE INDEX DDL をデータベースに直接実行するか、DDL を doctrine-migrations ファイルに書き込むことができます。後者のオプションには、変更のデプロイまたはロールバックが容易になるという利点があります。
カスタムインデックスの作成にどの方法を使用しても、Doctrine は常にそれらのカスタムインデックスをマップされていないインデックスとしてマークするため、 doctrine:schema:validate を実行すると、データベースが同期していないことを示すエラーが表示されます。 doctrine:schema:update --dump-sql または doctrine:migrations:diff の実行中も同様に、カスタム インデックスを削除するための DROP INDEX ... ステートメントが表示されます。
これらのパッケージ版を使用しています。 (このソリューションはパッケージの同じメジャー バージョンで動作すると思います):
これを処理するためのチュートリアルをいくつか見つけましたが、満足のいくものではありません:
ここ https://github.com/doctrine/DoctrineBundle/issues/1656 で platform_service 構成の置換に関する GitHub の問題を見つけました。
これらの 2 ページを読むことで、Doctrine ミドルウェアを通じてカスタム DBAL プラットフォームを使用する方法に関するすべての情報が得られました。
最後に、ソースコードを詳しく調べた結果、解決策が見つかりました。 4 つのファイルを作成する必要があります。2 つのファイルは Doctrine ミドルウェアに関するもので、他の 2 つのファイルは Doctrine DBAL プラットフォームとスキーマに関するものです。
必要に応じて名前空間とクラス名を変更します。
true, 'index_name_2' => true, ]; #[\Override] protected function _getPortableTableIndexesList(array $tableIndexes, string $tableName): array { $indexes = parent::_getPortableTableIndexesList($tableIndexes, $tableName); foreach (array_keys($indexes) as $indexName) { if (isset(self::IGNORED_INDEXES[$indexName])) { unset($indexes[$indexName]); } } return $indexes; } }
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3