2017-02-14 5 views
3

Der vollständige Fehler, die ich bekam, war:Lehre ORM Mapping MappingException in Symfony

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

als ich versuchte, die Entitäten an meinem BackendBundle zu machen.

Ich habe 3 Tabellen in MYSQL "empresas", "tecnicos", "profesionistas" und im Anschluss haben die fk jeder Tabelle

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; 

der Code von BackendBundle\Entity\Following ist

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

Können Sie Ihre Mapping zur Verfügung stellen? – Hassan

+0

Bitte geben Sie den Code 'BackendBundle \ Entity \ Following' an – SpartakusMd

+0

Lassen Sie mich den Beitrag mit dem Code bearbeiten –

Antwort

1

Es sieht als ob Sie versuchen, eine ManyToOne-Beziehung für 3 verschiedene Entitäten zu deklarieren. Aus der Syntax allein sieht es falsch aus, dass Sie dreimal wiederholen sollten.

Ich hatte ähnliche Probleme zuvor, wo ich wollte, dass eine Entität eine Zuordnung zu X verschiedenen Entitäten mit der gleichen Eigenschaft haben. Etwas wie folgt aus:

$ person -> $ Fahrzeug

wo $ Fahrzeug kann eine Instanz von Fahrrad, Auto oder Skateboard sein (sorry, ich kämpfe für mein Beispiel hier).

Ich glaube nicht, das möglich ist, Lehre verwenden und vielleicht ein anderes Unternehmen in zwischen (zum Beispiel $ Person -> $ vehicleOwnership -> $ Fahrzeug) hinzufügen müssen oder doctrine inheritance

verwenden