【问题标题】:Doctrine\ ORM\ Mapping\ MappingException in SymfonySymfony 中的 Doctrine\ ORM\ Mapping\ MappingException
【发布时间】:2017-02-14 19:36:19
【问题描述】:

我得到的完整错误是:

[Doctrine\ORM\Mapping\MappingException]                                       
  Property "followed" in "BackendBundle\Entity\Following" was already declared, but it must be declared only once

当我试图在我的 BackendBundle 中创建实体时。

我在 MYSQL “empresas”、“tecnicos”、“profesionistas” 有 3 个表,下面有每个表的 fk

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: {  }

【问题讨论】:

  • 你能提供你的映射吗?
  • 请提供BackendBundle\Entity\Following的代码
  • 让我编辑提供代码的帖子

标签: php mysql doctrine-orm symfony


【解决方案1】:

您似乎正试图为 3 个不同的实体声明多对一关系。仅从语法来看,您应该重复三次 followed 看起来是错误的。

在我希望一个实体使用相同的属性映射到 X 个不同的实体之前,我也遇到过类似的问题。像这样的:

$person->$vehicle

其中 $vehicle 可以是 Bicycle、Car 或 Skateboard 的实例(抱歉,我正在为我的示例而苦苦挣扎)。

我认为使用原则是不可能的,您可能需要在两者之间添加另一个实体(例如 $person->$vehicleOwnership->$vehicle)或使用 doctrine inheritance

【讨论】:

    猜你喜欢
    • 2022-10-26
    • 2014-01-08
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多