Вы можете создавать индексы базы данных, используя атрибут #[ORM\Index(fields: ['fieldName'] в файле сущности, а Doctrine сделает все остальное для управления индексом за вас, но Я не буду об этом говорить
По мере того, как ваш проект растет или требует особых требований, вам может потребоваться использовать собственные типы индексов, такие как GIST, GIN, BRIN и т. д. (https://www.postgresql.org/docs/current/indexes-types.html). Doctrine не поддерживает создание готовых типов индексов, специфичных для конкретного поставщика базы данных (ссылка).
Чтобы решить эту проблему, вы можете либо выполнить CREATE INDEX DDL непосредственно в базе данных, либо записать DDL в файл Doctory-migrations. Последний вариант упрощает развертывание или откат изменений.
Независимо от того, какой метод вы используете для создания пользовательского индекса, Doctrine всегда будет помечать эти пользовательские индексы как несопоставленные индексы, поэтому, если вы выполните Doctry:schema:validate, вы получите сообщение об ошибке, сообщающее, что ваша база данных не синхронизирована, то же самое при выполнении Doctor:schema:update --dump-sql или Doction:migrations:diff покажет вам оператор DROP INDEX ... для удаления пользовательских индексов.
Я использую эти версии пакета. (Я считаю, что решение будет работать с той же основной версией пакетов):
Я нашел несколько руководств по этому поводу, но они меня не удовлетворили:
Я нашел проблему GitHub, связанную с заменой конфигурации Platform_service, здесь https://github.com/doctrine/DoctrineBundle/issues/1656.
Прочитав эти две страницы, я получил всю информацию о том, как использовать собственную платформу DBAL через промежуточное программное обеспечение Doctrine:
Наконец, покопавшись в исходном коде, я нашел решение. Вам необходимо создать 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