2010-12-14 9 views
19

Tengo dos tablas y una tabla de unión: 'staff', 'classification' y 'staff_classification'. En la tabla de unión, tengo un campo booleano extra: 'showclassification'. Mi anotación es como sigue: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. ¿Cómo agregar el campo adicional showclassifications '' a la tabla de unión?
  2. ¿Cómo hago referencia al campo a través de DQL? P.ej. ¿Qué consulta obtendría todas las clasificaciones de un personal que pueden mostrarse?
  3. ¿Debo colocar la anotación anterior en una clase y una anotación @ManyToMany sin @tablezón en la otra? P.ej. @ManyToMany (targetEntity = "Clasificación")?
+0

Aquí puede encontrar un excelente artículo sobre el enfoque a seguir en este caso: http://future500.nl/articles/2013/09/doctrine-2-how-to-handle-join-tables-with-extra -columns/ –

Respuesta

32

Desea una entidad que describa la relación (Clasificaciones del personal), que tiene relaciones OneToMany con el personal y las clasificaciones.

ManyToMany no le permite tener propiedades "adicionales", porque la tabla de unión no es una entidad y, por lo tanto, no puede tener ninguna propiedad.

+3

+1 Es la forma lógica de OO para hacer las cosas. Esta pregunta exacta se hace mucho en la lista de correo, y es lo que el equipo de Doctrine sugiere también. –

+0

impresionante. Gracias, seguiré ese patrón y veré cómo voy. Aclamaciones. – waigani

+1

Usando el patrón OO, ¿cuál es la respuesta a la pregunta 2 anterior? ¿Cómo se vería el DQL? – waigani