我应该在哪里注册我的DBAL类型?

时间:2018-02-01 08:03:51

标签: php mysql symfony doctrine-orm doctrine

我正在使用Doctrine的枚举类型来跟踪我在Symfony应用程序中使用的实体的状态。我(大致)使用这里描述的方法:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/mysql-enums.html

当我尝试更新数据库架构时出现问题。我收到以下错误:

  [Doctrine\DBAL\DBALException]
  Unknown column type "EnumStatusType" requested. Any Doctrine type that you use has to be registered
   with \Doctrine\DBAL\Types\Type::addType(). You can get a list of all the known types with \Doctrin
  e\DBAL\Types\Type::getTypesMap(). If this error occurs during database introspection then you might
   have forgot to register all database types for a Doctrine Type. Use AbstractPlatform#registerDoctr
  ineTypeMapping() or have your custom types implement Type#getMappedDatabaseTypes(). If the type nam
  e is empty you might have a problem with the cache or forgot some mapping information.

此错误在某种程度上非常有用 - 文档也是如此 - 但这两种资源都遗漏了两条信息:我应该使用addType()在哪个文件中注册我的新类型?< / strong>

两个次要问题:我是否应该静态调用addType()方法,如示例所示?如果没有,我应该如何检索一个对象以便非静态地调用该方法?

1 个答案:

答案 0 :(得分:5)

您可以使用symfony配置添加自定义类型。

如果您使用的是symfony 4,可以config/packages/doctrine.yaml使用此代码:

doctrine:
    dbal:
        types:
            your_custom_type:  App\Type\YourCustomType

如果您使用的是symfony 3.x,可以在此文件中添加app/config/config.yml此代码:

doctrine:
    dbal:
        types:
            your_custom_type:  AppBundle\Type\YourCustomType