2010-12-14 7 views
19

Ho due tabelle e una tabella di join: "staff", "classificazione" e "staff_classification". Nella tabella di join ho un campo booleano extra: "show classification". La mia annotazione è come segue:Doctrine 2 join table + extra fields

/** 
* @ManyToMany(targetEntity="Staff", inversedBy="classifications") 
* @JoinTable(name="staff_classifications", 
* joinColumns={@JoinColumn(name="staffid", referencedColumnName="id")}, 
* inverseJoinColumns={@JoinColumn(name="classificationid", referencedColumnName="id", unique=true)}); 
*/ 
  1. Come faccio ad aggiungere il campo extra 'showclassifications' al tavolo aderire?
  2. Come si fa riferimento al campo tramite DQL? Per esempio. Quale query otterrebbe tutte le classificazioni di uno staff che possono essere mostrate?
  3. Inserisco l'annotazione precedente in una classe e un'annotazione @ManyToMany senza @joinTable nell'altra? Per esempio. @ManyToMany (targetEntity = "Classificazione")?
+0

Qui puoi trovare un ottimo articolo sull'approccio da seguire in questo caso: http://future500.nl/articles/2013/09/doctrine-2-how-to-handle-join-tables-with-extra -colonne/ –

risposta

32

Si desidera un'entità che descriva la relazione (StaffClassifications), che ha una relazione OneToMany con il personale e le classificazioni.

ManyToMany non consente di avere proprietà "extra", poiché la tabella di join non è un'entità e pertanto non può avere proprietà.

+3

+1 È il modo logico OO di fare le cose. Questa esatta domanda viene posta molto sulla mailing list, ed è ciò che suggerisce anche il team di Doctrine. –

+0

fantastico. Grazie, seguirò questo schema e vedrò come vado. Saluti. – waigani

+1

Usando il modello OO, qual è la risposta alla domanda 2 sopra? Come sarebbe il DQL? – waigani