为了解释我的问题,我尝试了this StackExchange question建议的每个解决方案。
这是给出的错误:
[Doctrine\DBAL\DBALException]
Unknown column type "enumAddressSource" requested. Any Doctrine type t
hat you use has to be registered with \Doctrine\DBAL\Types\Type::addTy
pe(). You can get a list of all the known types with \Doctrine\DBAL\Ty
pes\Type::getTypesMap(). If this error occurs during database introspe
ction then you might have forgot to register all database types for a
Doctrine Type. Use AbstractPlatform#registerDoctrineTypeMapping() or h
ave your custom types implement Type#getMappedDatabaseTypes(). If the
type name is empty you might have a problem with the cache or forgot s
ome mapping information.
此错误与我在尝试任何修复之前收到的错误相同。
这是config.yml文件中的当前Doctrine代码:
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mapping_types:
enum: string
enumAddressSource: string
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
# path: "%database_path%"
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
vendor / doctrine / dbal / lib / Doctrine / DBAL / Platforms / MySqlPlatform.php下的相关代码:
protected function initializeDoctrineTypeMappings()
{
$this->doctrineTypeMapping = array(
'tinyint' => 'boolean',
'smallint' => 'smallint',
...
'enum' => 'string',
'enumAddressSource' => 'string',
);
我会尝试接受此处显示的建议:Doctrine Cookbook,但文章没有明确指出要将此代码注入哪个文件(具体参见选项1)。在我看来,显示的代码将被第二个代码示例底部注入的代码所覆盖。
对于数据库中的所有枚举都会发生这种情况。手动更改数据库并不是一个选项。我还能尝试什么?
答案 0 :(得分:0)
不确定的目的:enumAddressSource:string
不应该枚举:字符串(如前面的行)就足够了吗?
你得到的错误消息基本上是告诉你没有类型叫做" enumAdressSource",因此没有这样的类型可以映射到字符串。你是映射类型,而不是这里的字段。
答案 1 :(得分:0)
错误的原因是嵌套在MySQL数据库列中的注释。我从来没有想过Doctrine会阅读这些评论并尝试解释它们。删除注释修复了问题。我找不到关于这个问题的进一步文件。如果有人有好的来源,请评论(或编辑)这个答案。