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;
}
4 Réponses :
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. p>
BTW Pourquoi ne voulez-vous pas déplacer des associations de base sur des classes de béton et définissez Valid inversedby alors? P>
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>
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 J'ai essayé un certain nombre d'options, dont aucune n'est satisfaisante. P> 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>
[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.
Je rencontre aussi ce problème. Y a-t-il une solution maintenant?
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: et en classe Barlog: p> 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. P> p>
La bonne façon de faire cela (puisque la doctrine 2.3) utilise AssociationverRides code>
.
Supprimer BASELOG STRY> P> 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>
/**
* @ORM\Entity */
* @ORM\AssociationOverrides({
* @ORM\AssociationOverride(name="user", inversedBy="barLogs")
* })
*/
class BarLog extends BaseLog {
// Some additional fields
}
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