2010-12-14 73 views
19

J'ai deux tables et une table de jointure: 'staff', 'classification' et 'staff_classification'. Dans la table de jointure, j'ai un champ booléen supplémentaire: 'showclassification'. Mon annotation est la suivante:Doctrine 2 table de jointure + champs supplémentaires

/** 
* @ManyToMany(targetEntity="Staff", inversedBy="classifications") 
* @JoinTable(name="staff_classifications", 
* joinColumns={@JoinColumn(name="staffid", referencedColumnName="id")}, 
* inverseJoinColumns={@JoinColumn(name="classificationid", referencedColumnName="id", unique=true)}); 
*/ 
  1. Comment puis-je ajouter le champ supplémentaire « showclassifications » à la table de jointure?
  2. Comment faire référence au champ via DQL? Par exemple. Quelle requête obtiendrait toutes les classifications d'un personnel qui peuvent être affichées? Est-ce que je place l'annotation ci-dessus dans une classe et une annotation @ManyToMany sans @joinTable dans l'autre? Par exemple. @ManyToMany (targetEntity = "Classification")?
+0

Ici vous pouvez trouver un bon article sur l'approche à suivre dans ce cas: http://future500.nl/articles/2013/09/doctrine-2-how-to-handle-join-tables-with-extra -columns/ –

Répondre

32

Vous voulez une entité qui décrit la relation (StaffClassifications), qui a des relations OneToMany avec le personnel et les classifications.

ManyToMany ne vous permet pas d'avoir des propriétés "supplémentaires", car la table de jointure n'est pas une entité et ne peut donc avoir aucune propriété.

+3

+1 C'est la manière OO logique de faire les choses. Cette question exacte est souvent posée sur la liste de diffusion, et c'est également ce que suggère l'équipe de Doctrine. –

+0

génial. Merci, je vais suivre ce modèle et voir comment je vais. À votre santé. – waigani

+1

En utilisant le modèle OO, quelle est la réponse à la question 2 ci-dessus? À quoi ressemblerait le DQL? – waigani