Puedes crear índices de bases de datos usando el atributo #[ORM\Index(fields: ['fieldName'] en el archivo de entidad y Doctrine hará el resto para administrar el índice por ti, pero No hablaré de eso
A medida que su proyecto crece o requiere requisitos específicos, es posible que necesite utilizar tipos de índice personalizados como GIST, GIN, BRIN, etc. (https://www.postgresql.org/docs/current/indexes-types.html). Doctrine no admite la creación de tipos de índices específicos del proveedor de bases de datos listos para usar (ref).
Para abordar este problema, puede ejecutar CREATE INDEX DDL directamente en la base de datos o escribir el DDL en el archivo de doctrina-migración. La última opción le brinda la ventaja de que es más fácil implementar o revertir los cambios.
No importa qué método utilice para crear el índice personalizado, Doctrine siempre marcará esos índices personalizados como índices no asignados, por lo tanto, si ejecuta Doctrine:schema:validate, obtendrá un error que indica que si su base de datos no está sincronizada, el Lo mismo al ejecutar doctrina: esquema: actualización --dump-sql o doctrina: migraciones: diff le mostrará la instrucción DROP INDEX ... para eliminar los índices personalizados.
Estoy usando estas versiones de paquetes. (Creo que la solución funcionará en la misma versión principal de los paquetes):
Encontré varios tutoriales para manejar esto pero no me satisfacen:
Encontré un problema de GitHub sobre el reemplazo de la configuración de platform_service aquí https://github.com/doctrine/DoctrineBundle/issues/1656.
La lectura de estas 2 páginas me brindó toda la información sobre cómo usar una plataforma DBAL personalizada a través del middleware Doctrine:
Finalmente, después de profundizar en el código fuente, encontré la solución. Debe crear 4 archivos, 2 archivos son sobre el middleware Doctrine y otros 2 archivos son sobre la plataforma y el esquema Doctrine DBAL.
Modifique el espacio de nombres y el nombre de la clase según sus necesidades.
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; } }
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3