I’m having problems when I try to update my schema with doctrine “bin/console doctrine:schema:update -f”
The problem is
[DoctrineDBALException]
Unknown column type “FinancesBankInfrastructurePersistenceDoctrineBankIdType” requested. Any Doctrine type that you use has to be registered with DoctrineDBALTypesType::addType(). You can get a lis
t of all the known types with DoctrineDBALTypesType::getTypesMap(). If this error occurs during database introspection then you might have forgotten to register all database types for a Doctrine Type. U
se AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement Type#getMappedDatabaseTypes(). If the type name is empty you might have a problem with the cache or forgot some mapping
information.
It’s strange because when I see in my schema database I found the type in the coments, and if I delete it I can update the schema normally. I didn’t find any aditional configuration to solve this. Actually my config.yml is:
doctrine: dbal: driver: "%database_driver%" host: "%database_host%" port: "%database_port%" dbname: "%database_name%" user: "%database_user%" password: "%database_password%" charset: UTF8 types: bank_id: FinancesBankInfrastructurePersistenceDoctrineBankIdType
The custom type:
final class BankIdType extends UuidType { protected function typeClassName(): string { return BankId::class; } }
The UuidType (abstract)
abstract class UuidType extends StringType implements DoctrineCustomType { abstract protected function typeClassName(): string; public function getName(): string { return self::customTypeName(); } public static function customTypeName(): string { return static::class; } public function convertToPHPValue($value, AbstractPlatform $platform) { if(!is_null($value)){ $className = $this->typeClassName(); return new $className($value); }else{ return $value; } } /** @var Uuid $value */ public function convertToDatabaseValue($value, AbstractPlatform $platform) { if(!is_null($value)){ return $value; }else{ return $value; } } }
The interface implemented:
interface DoctrineCustomType { public static function customTypeName(): string; }
It’s the mapping “Bank.orm.xml”
<?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine- project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <entity name="FinancesBankDomainBank"> <id name="id" type="bank_id" column="id"/>
This is driving me crazy!
Advertisement
Answer
Finally the solution was delete all the doctrine comments in mysql database and in the mapping config set the custom types as follows:
types: bank_id: class: FinancesBankInfrastructurePersistenceDoctrineBankIdType commented: false