2017-02-14 4 views
3

Полная ошибка, которую я получил:Doctrine ORM Mapping MappingException в Symfony

[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" и следующие имеют 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: { } 
+0

Можете ли вы представить ваше отображение? – Hassan

+0

Пожалуйста, предоставьте код 'BackendBundle \ Entity \ After' – SpartakusMd

+0

, позвольте мне отредактировать сообщение, предоставляющее код –

ответ

1

Это выглядит например, вы пытаетесь объявить отношения ManyToOne для трех разных объектов. Из синтаксиса в одиночку это выглядит неправильно, что вы должны повторить followed три раза.

У меня были подобные проблемы, прежде чем я хотел, чтобы сущность имела сопоставление с X различными объектами, использующими одно и то же свойство. Что-то вроде этого:

$ человек -> $ автомобиль

где $ транспортное средство может быть экземпляром велосипедов, автомобилей или скейтборд (извините, я изо всех сил для моего примера здесь).

Я не думаю, что это возможно с помощью доктрины, и вы, возможно, потребуется добавить еще один объект между ними (например, $ человека -> $ vehicleOwnership -> $ автомобиля) или использовать doctrine inheritance