从现有数据库映射的Symfony2 Doctrine2(例外)

时间:2011-08-12 19:46:27

标签: database doctrine-orm symfony

我已经有了MySQL数据库,因此我希望从existing database创建映射元数据。

php app/console doctrine:mapping:convert xml ./src/MainBundle/Resources/config/doctrine/metadata/orm --from-database --force

但是我得到了以下异常

[Doctrine\ORM\Mapping\MappingException] 
Property "customerid" in "Accountcustomer" was already declared, but it must be declared only once

我没有在数据库中的任何其他地方的任何主/复合键中使用customerId,但是我已经多次将它用作外键。

但是我不知道复合键或其他主键中customerId如何影响这一点。

4 个答案:

答案 0 :(得分:6)

不幸的是,Doctrine 2.0不支持主键作为外键... 检查链接:http://www.doctrine-project.org/docs/orm/2.0/en/reference/limitations-and-known-issues.html

答案 1 :(得分:3)

另一种解决方案:

删除所有外键,然后它将工作:)。

我知道不推荐它,但它帮助了我。并且生成的实体工作正常。

删除所有外键:

运行此sql查询 -

<强>的MySQL

SELECT concat('ALTER TABLE ', TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ';') 
FROM information_schema.key_column_usage 
WHERE CONSTRAINT_SCHEMA = 'db_name' AND referenced_table_name IS NOT NULL;

<强>的PostgreSQL

SELECT concat('ALTER TABLE ', table_name, ' DROP CONSTRAINT IF EXISTS ', constraint_name, ';')
FROM information_schema.key_column_usage
WHERE constraint_schema = 'public' AND constraint_catalog = 'one' AND constraint_name LIKE '%_fkey';

然后再次运行生成的sql查询。

答案 2 :(得分:0)

我得到了同样的错误,我注意到我对db中的单个关系有一些双键(约束)。删除它,每一件事都很好。

答案 3 :(得分:0)

我遇到了同样的错误。 我从现有数据库生成实体。

php bin/console doctrine:mapping:import App\\Entity annotation --path=src/Entity --force --verbose --no-interaction

错误消息是“已经声明了“ 用户”中的属性“ 空缺”,但必须将其声明”

我在调试原理时发现了错误的原因

如果一张表与多张表之间存在许多关系 和关联表上的列名相同 在vacancy_id列名称上有用户表和vacancy_a,vacancy_b之间的关系。

select C.COLUMN_NAME,C.TABLE_NAME,K.* from information_schema.KEY_COLUMN_USAGE K inner join information_schema.`COLUMNS` C on (C.TABLE_NAME = K.TABLE_NAME and C.TABLE_SCHEMA = K.TABLE_SCHEMA) where K.TABLE_SCHEMA='schema_name' and K.REFERENCED_TABLE_NAME='**user**' and C.COLUMN_NAME='**vacancy**_id' order by C.COLUMN_NAME

查询结果是相关的列和表。

解决方案:重命名为列名

ALTER TABLE vacancy_a CHANGE vacany_id vacancy_a_id int(11);