CustomDbPlatform extendiendo MySqlPlatform basado en MariaDb1027Platform existente con el método getDefaultValueDeclarationSQL personalizado. No puedo extender MariaDbPlatform ya que es una clase final.
class CustomDbPlatform extends MySqlPlatform { public function getJsonTypeDeclarationSQL(array $column): string { return 'LONGTEXT'; } protected function getReservedKeywordsClass(): string { return MariaDb102Keywords::class; } protected function initializeDoctrineTypeMappings(): void { parent::initializeDoctrineTypeMappings(); $this->doctrineTypeMapping['json'] = Types::JSON; } public function getDefaultValueDeclarationSQL($column): string { if (isset($column['default'], $column['type'])) { $default = $column['default']; $type = $column['type']; if ($type instanceof DateTimePrecisionType && stripos($default, $this->getCurrentTimestampSQL()) !== false) { if (isset($column['length']) && $column['length'] > 0 && $column['length'] < 255) { return ' DEFAULT ' . sprintf('%s(%d)', $this->getCurrentTimestampSQL(), $column['length']); } return ' DEFAULT ' . $this->getCurrentTimestampSQL(); } } return parent::getDefaultValueDeclarationSQL($column); } } Desafortunadamente, durante la actualización del esquema, Doctrine obliga a actualizar básicamente todo el esquema con nuevas definiciones de columnas de tabla. Este problema lo causa MySqlSchemaManager , que verifica específicamente MariaDb1027Platform .
if ($this->_platform instanceof MariaDb1027Platform) { $columnDefault = $this->getMariaDb1027ColumnDefault($this->_platform, $tableColumn['default']); } else { $columnDefault = $tableColumn['default']; } ¿Cómo puedo hacer que Doctrine reconozca mi CustomDbPlatform como MariaDb1027Platform ? Hacer SchemaManager personalizado parece ser una exageración.
Utilizando
Si desea extender MariaDb1027Platform , la única forma es:
finalfiles de carga automática del compositorAdemás, he creado PR https://github.com/doctrine/dbal/pull/4909 para ver si los mantenedores quieren apoyar esto oficialmente.