您可以使用实体文件上的 #[ORM\Index(fields: ['fieldName'] 属性创建数据库索引,Doctrine 将完成剩下的工作来为您管理索引,但是我不会谈论这个。
随着您的项目增长或需要特定要求,您可能需要使用自定义索引类型,如 GIST、GIN、BRIN 等 (https://www.postgresql.org/docs/current/indexes-types.html)。 Doctrine 不支持创建开箱即用的特定于数据库供应商的索引类型(参考)。要解决此问题,您可以直接对数据库执行 CREATE INDEX DDL,或者将 DDL 写入到doctrine-migrations 文件中。后一个选项使您可以更轻松地部署或回滚更改。
无论您使用哪种方法创建自定义索引,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