Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/07/2012, 10:24
Avatar de maycolalvarez
maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Doctrine 2 mappeo de relaciones

en el caso de ManyToMany debes de especificar muy bien cual de las 2 entidades es la propietaria o dueño de la relación, es decir, cual de las 2 es la encargada de gestionar las operaciones de inserción y modificación de la otra, por lo que lo ideal es que sea una relación bidireccional, de lo contrario Doctrine2 creará 2 tablas puente para manejar la relación de cada lado como si fuese el propietario.

Sé que no es un concepto fácil de digerir, pero puedes consultar mi copia de la traducción del Manual de Doctrine2 por Nacho Pacheco, descargándola desde mi página: http://maycolalvarez.com/downloads

Aquí te ofrezco un ejemplo de la relación Article M:M con Tag básico:

Dentro de la Entidad Article:

Código PHP:
Ver original
  1. /**
  2.      * @var string $tags
  3.      *
  4.      * ORM\Column(name="tags", type="string", length=255)
  5.      * @ORM\ManyToMany(targetEntity="Tag", inversedBy="articles")
  6.      * @ORM\JoinTable(name="article_tags",
  7.      *     joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
  8.      *     inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
  9.      * )
  10.      */
  11.     private $tags;

el atributo $tags apunta a su lado inverso en la entidad Tag, que es el atributo $articles inversedBy="articles", por lo tanto Article es el lado propietario y Tag el inverso

Dentro de la Entidad Tag:

Código PHP:
Ver original
  1. /**
  2.      *
  3.      * @ORM\ManyToMany(targetEntity="Article", mappedBy="tags")
  4.      */
  5.     private $articles;

Al contrario de lo anterior el atributo $articles apunta a su lado propietario, que es el atributo $tag de la Entidad Article, por lo tanto Tag es el lado inverso y Article el propietario.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...