8
votes

Doctrine2 Mappage de mappage Récupération Héritée InversedBy Field de MapperSuPlass

Une autre question. J'ai une entité abstraite de base à base de base qui maintient l'association à mon utilisateur. De plus, j'ai 2 entités (LOPOGOG & BARLOG) qui prolongent BASELOG. De plus, j'ai mon entité utilisateur qui supposait détenir deux associations pour se connecter. Un pour POPOG et un pour Barlog. Voici mon problème. Je reçois des messages d'erreur car je ne sais pas comment écraser le champ inversé de Baselog dans l'extension de l'entité. Pourriez-vous s'il vous plaît, aidez-moi s'il vous plaît?

Parce que je pense que mon explication n'est pas vraiment bonne, voici la création de mes entités. P>

BASELOG STRY> P>

/** @ORM\Entity */
class User {
  /**
   * @ORM\OneToMany(targetEntity="FooLog", mappedBy="user", cascade={"persist"})
   */
  private $fooLogs;

  /**
   * @ORM\OneToMany(targetEntity="BarLog", mappedBy="user", cascade={"persist"})
   */
  private $barLogs;
}


3 commentaires

Avez-vous déjà résolu cela? Je suis confronté à une situation similaire.


Dupliqué possible de Remplacer inversedby Mapping dans la doctrine 2 Héritage


@hafichuk, il y a une question dupliquée avec une excellente réponse là-bas: Stackoverflow.com/a/22820964/37706


4 Réponses :


1
votes

IIRC il n'y avait pas de bon moyen de remplacer les mappages dans les anciennes versions de la doctrine. Dans la doctrine> = 2.2 Il est appelé Remplacement de l'association Alors peut-être que vous pouvez l'utiliser.

BTW Pourquoi ne voulez-vous pas déplacer des associations de base sur des classes de béton et définissez Valid inversedby alors?


3 commentaires

J'aimerais conserver l'association à Baselog car c'est à chaque fois même que le nom var pour l'entité utilisateur.


J'ai eu un coup d'œil à la documentation fournie mais je ne trouve pas comment remplacer le champ inversé. D'autres suggestions?


Doc Link est mort. En outre, en utilisant un "dernier" plutôt que "dernier" semblent un choix plus sage, car cela indiquera une version réellement libérée. Nouveau lien ici < / a>



3
votes

J'ai lutté avec le même problème en utilisant Héritage de table unique . Pour autant que je sache, il n'ya pas de solution. Même si inversedby code> est considéré comme obligatoire, il semble que vous puissiez vous en ignorer. Toutefois, comme la Doctrine Docs suggère que la performance se détériore rapidement.

@associantoverride code> ne vous aide pas, car vous ne pouvez pas modifier les définitions de l'association, seules les propriétés de la colonne de base de données. P>

J'ai essayé un certain nombre d'options, dont aucune n'est satisfaisante. P>

MISE À JOUR: STRUT> Je n'ai toujours pas pu trouver de solution à ces sortes d'erreurs lors de l'exécution App / Console Doctrine: Schema: Valider Code>. P>

[Mapping]  FAIL - The entity-class 'Acme\AcmeBundle\Entity\CourseLocation' mapping is invalid:
* The field Acme\AcmeBundle\Entity\CourseLocation#facilitators is on the inverse side of a bi-directional relationship, but the specified mappedBy association on the target-entity Acme\AcmeBundle\Entity\CourseFacilitatorResponsibility#courseLocation does not contain the required 'inversedBy' attribute.


1 commentaires

Je rencontre aussi ce problème. Y a-t-il une solution maintenant?



4
votes

J'ai eu un problème similaire avec un seul héritage. Je résolvai cela en définissant la même association dans les deux classes d'entités (parent et héritée) mais avec un nom différent. Dans votre cas, vous pouvez essayer ceci: xxx

et en classe Barlog: xxx

Nom différent ($ bar_user). Vous devez également définir des propriétés d'Apressogs et de Barlogs dans l'entité utilisateur. Cela supprime les erreurs de validation de la doctrine.


0 commentaires

1
votes

La bonne façon de faire cela (puisque la doctrine 2.3) utilise AssociationverRides code> .

Supprimer inserdedby =" LOGS " CODE> de BASELOG Code> Classe - Étant donné qu'une classe Super mappée ne représente pas une véritable entité de toute façon - puis la remplaçait dans des sous-classes. Voici comment cela devrait regarder: p>

BASELOG STRY> P>

/**
 * @ORM\Entity */
 * @ORM\AssociationOverrides({
 *     @ORM\AssociationOverride(name="user", inversedBy="barLogs")
 * })
 */
class BarLog extends BaseLog {
  // Some additional fields
}


0 commentaires