Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Doctrine 2 mappeo de relaciones

Estas en el tema de Doctrine 2 mappeo de relaciones en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estimados amigos, estoy utilizando este ORM para un proyecto y quiero saber si alguien me podria explicar de mejor manera como generar las relaciones OneToMany, ...
  #1 (permalink)  
Antiguo 31/07/2012, 08:39
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Doctrine 2 mappeo de relaciones

Estimados amigos,

estoy utilizando este ORM para un proyecto y quiero saber si alguien me podria explicar de mejor manera como generar las relaciones OneToMany, ManyToOne ManyToMany.

ejemplo si tengo lo un "sitio de ofertas laborales" con estas entidades.

Usuario
Empresa (muchas ofertas puede tener una sola empresa)
Ofertas (una empresa puede tener muchas ofertas)
Postalaciones (un usuario puede tener muchas postulaciones esto seria creo yo una tabla intermedia que genera entre la relacion usuario -> ofertas).

Espero que me puedan ayudar ya que no soy muy bueno con el ingles y la documentacion de doctrine utiliza algunos terminos que no manejo muy bien.

desde ya muchas gracias.
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #2 (permalink)  
Antiguo 31/07/2012, 10:24
Avatar de 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...
  #3 (permalink)  
Antiguo 31/07/2012, 11:53
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: Doctrine 2 mappeo de relaciones

y como puedo agregar mas campos a la tabla que se genera?
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #4 (permalink)  
Antiguo 31/07/2012, 12:13
Avatar de 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 ése caso lo recomendable es aplicar un 1:M hacia la tabla puente y que la misma tabla sea una entidad, lo que no estoy seguro es de que puedas establecer una relación M:M usando la tabla puente, no se me ha presentado la situación y nunca lo he probado, intenta establecerla luego de hacer las 1:M, lo que si estoy seguro es que pude presentar fallos al tratar de actualizar si usas los setters de dicha relación, por lo que te recomiendo instanciar la Entidad puente y agregarlas directamente por la relación 1:M antes de la M:M para que no de problemas al persistir.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: doctrine, relaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:39.