엔티티 파일의 #[ORM\Index(fields: ['fieldName'] 속성을 사용하여 데이터베이스 색인을 생성할 수 있으며 Doctrine이 색인 관리를 위한 나머지 작업을 수행합니다. 그것에 대해서는 이야기하지 않겠습니다.
프로젝트가 성장하거나 특정 요구 사항이 필요하면 GIST, GIN, BRIN 등과 같은 사용자 정의 인덱스 유형을 사용해야 할 수도 있습니다(https://www.postgresql.org/docs/current/indexes-types.html). Doctrine은 데이터베이스 공급업체별 인덱스 유형 기본(ref) 생성을 지원하지 않습니다.이 문제를 해결하려면 CREATE INDEX DDL을 데이터베이스에 직접 실행하거나 교리 마이그레이션 파일에 DDL을 작성할 수 있습니다. 후자의 옵션을 사용하면 변경 사항을 더 쉽게 배포하거나 롤백할 수 있다는 이점이 있습니다.
사용자 정의 색인을 생성하는 데 어떤 방법을 사용하든 상관없이 Doctrine은 항상 해당 사용자 정의 색인을 매핑되지 않은 색인으로 표시하므로doctrine:schema:validate를 실행하면 데이터베이스가 동기화되지 않은 경우 다음과 같은 오류가 발생합니다. Doctrine:schema:update --dump-sql 또는 Doctrine:migrations:diff를 실행하는 동안에도 마찬가지로 사용자 정의 인덱스를 제거하는 DROP INDEX ... 문이 표시됩니다.
해결책
이 두 페이지를 읽으면서 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