Symfony中的Doctrine\ORM\Mapping\MappingException

3
我收到的完整错误信息是:
[Doctrine\ORM\Mapping\MappingException]                                       
  Property "followed" in "BackendBundle\Entity\Following" was already declared, but it must be declared only once

当我尝试在我的BackendBundle中创建实体时,我有3个MYSQL表格:“empresas”,“tecnicos”,“profesionistas”,以下是每个表格的外键。
CREATE TABLE following(
id int(255) not null auto_increment,
user int(255),
followed int(255),
CONSTRAINT pk_following PRIMARY KEY(id),
CONSTRAINT fk_empresas_following FOREIGN KEY(user) REFERENCES empresas(id),
CONSTRAINT fk_tecnicos_following FOREIGN KEY(user) REFERENCES tecnicos(id),
CONSTRAINT fk_profesionistas_following FOREIGN KEY(user) REFERENCES profesionistas(id),
CONSTRAINT fk_empresas_followed FOREIGN KEY(followed) REFERENCES empresas(id),
CONSTRAINT fk_tecnicos_followed FOREIGN KEY(followed) REFERENCES tecnicos(id),
CONSTRAINT fk_profesionistas_followed FOREIGN KEY(followed) REFERENCES profesionistas(id)
)ENGINE = InnoDb; 

BackendBundle\Entity\Following的代码如下

BackendBundle\Entity\Following:
    type: entity
    table: following
    indexes:
        fk_following_empresas:
            columns:
                - user
        fk_following_tecnicos:
            columns:
                - user
        fk_following_empresas:
            columns:
                - user
        fk_followed_empresas:
            columns:
                - followed
        fk_followed_tecnicos:
            columns:
                - followed
        fk_followed_profesionistas:
            columns:
                - followed
    id:
        id:
            type: integer
            nullable: false
            options:
                unsigned: false
            id: true
            generator:
                strategy: IDENTITY
    manyToOne:
        followed:
            targetEntity: Empresa
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                followed:
                    referencedColumnName: id
            orphanRemoval: false
        followed:
            targetEntity: Tecnico
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                followed:
                    referencedColumnName: id
            orphanRemoval: false
        followed:
            targetEntity: Profesionista
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                followed:
                    referencedColumnName: id
            orphanRemoval: false
        user:
            targetEntity: Empresa
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                user:
                    referencedColumnName: id
            orphanRemoval: false
        user:
            targetEntity: Tecnico
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                user:
                    referencedColumnName: id
            orphanRemoval: false
        user:
            targetEntity: Profesionista
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                user:
                    referencedColumnName: id
            orphanRemoval: false
    lifecycleCallbacks: {  }

你能提供你的映射吗? - Hassan
请提供BackendBundle\Entity\Following的代码。 - Marin Bînzari
让我编辑帖子并提供代码。 - cesg.dav
1个回答

1
看起来你正在尝试为三个不同的实体声明ManyToOne关系。从语法上看,重复三次“followed”似乎是错误的。
我以前也遇到过类似的问题,我想让一个实体使用相同的属性映射到X个不同的实体。就像这样: $person->$vehicle 其中$vehicle可以是自行车、汽车或滑板(抱歉,我在这里举例子有些困难)。
我认为使用doctrine不可能做到这一点,你可能需要在中间添加另一个实体(例如$person->$vehicleOwnership->$vehicle)或者使用doctrine inheritance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接