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

[SOLUCIONADO] Relacion n:2

Estas en el tema de Relacion n:2 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola comunidad una pregunta. Como podría mapear la relación de estas dos Entidades?: Equipo id: nombre: etc... Partido id: idEquipo1(targetEntity="Equipo") idEquipo2(targetEntity="Equipo") etc... Lo que tengo ...
  #1 (permalink)  
Antiguo 16/03/2014, 21:31
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Relacion n:2

Hola comunidad una pregunta. Como podría mapear la relación de estas dos Entidades?:

Equipo
id:
nombre:
etc...


Partido
id:
idEquipo1(targetEntity="Equipo")
idEquipo2(targetEntity="Equipo")
etc...

Lo que tengo es esto
Código PHP:
 /**
     * @var \Equipos
     *
     * @ORM\ManyToOne(targetEntity="Equipos", inversedBy="partidosxy", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_Equipo1", referencedColumnName="id")
     * })
     */
    
private $idEquipo1;

    
/**
     * @var \Equipos
     *
     * @ORM\ManyToOne(targetEntity="Equipos", inversedBy="partidosxy", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_Equipo2", referencedColumnName="id")
     * })
     */
    
private $idEquipo2
Pero luego ya no se como hacer el mapeo desde Equipos .

Código PHP:
/**
    * @ORM\OneToMany(targetEntity="Partidos", mappedBy="¿?", cascade={"persist"})
    */    
    
private $partidosxy
    
    
    public function 
__construct()
    {
        
$this->partidosxy = new ArrayCollection();
    } 
Espero me haya podido dar a entender :P

Saludos
  #2 (permalink)  
Antiguo 16/03/2014, 21:36
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Relacion n:2

El ejemplo de la doc no te sirve ? https://doctrine-orm.readthedocs.org...lf-referencing
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 16/03/2014, 21:53
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Relacion n:2

Ya la había probado, pero ahora que lo veo por segunda vez, veo que entendí al revés las tablas del ejemplo y lo deje rápido por que pensé que no iba por ahí la solución pero gracias a tu comentario me doy cuenta de que así es.

Ya lo hago de nuevo gracias. A veces todo lo que uno necesita es alguien que te diga que vas por el camino correcto para seguirle echando ganas ^^
  #4 (permalink)  
Antiguo 16/03/2014, 22:03
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Relacion n:2

Y ya aprovechando una vez tenga la relación , para generar un campo de tipo collection en el formType a que atributo hago referencia. Según el ejemplo, seria desde "$friendsWithMe" o desde "$myFriends" ?
  #5 (permalink)  
Antiguo 17/03/2014, 14:12
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Relacion n:2

Caray! lo tengo igual al ejmplo y me brica este error:

"AnnotationException: [Semantical Error] The annotation "@ManyToMany" in property Futbol\MainBundle\Entity\Equipo::$partidosxy1 was never imported. Did you maybe forget to add a "use" statement for this annotation?"

mis entidades estan asi
Código PHP:
/**
     * @ManyToMany(targetEntity="Equipo", mappedBy="partidosxy2")
     **/    
    
private $partidosxy1;
    
    
/**
     * @ManyToMany(targetEntity="Equipo", inversedBy="partidosxy1")
     * @JoinTable(name="Partidos",
     *      joinColumns={@JoinColumn(name="idEquipo1", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="idEquipo2", referencedColumnName="id")}
     *      )
     **/    
    
private $partidosxy2
    
    
    public function 
__construct()
    {       
        
$this->partidosxy1 = new ArrayCollection();
        
$this->partidosxy2 = new ArrayCollection();
    } 
y
Código PHP:
 /**
     * @var \Inscripcionequipo
     *
     * @ORM\ManyToOne(targetEntity="Equipo", inversedBy="partidosxy1", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_Equipo1", referencedColumnName="id")
     * })
     */
    
private $idEquipo1;

    
/**
     * @var \Inscripcionequipo
     *
     * @ORM\ManyToOne(targetEntity="Equipo", inversedBy="partidosxy2", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_Equipo2", referencedColumnName="id")
     * })
     */
    
private $idEquipo2
Alguna idea de que pueda ser? :/
  #6 (permalink)  
Antiguo 17/03/2014, 15:00
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Relacion n:2

@ManyToMany mal
@ORM\ManyToMany bien
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 17/03/2014, 15:56
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Relacion n:2

Gracias masterpuppet, se resolvio ese problema pero ahora no encuentro como mapear la enitdad Partido me arroja esto:

The mappings Futbol\MainBundle\Entity\Partidos#idEquipo1 and Futbol\MainBundle\Entity\Inscripcionequipo#partido sxy2 are inconsistent with each other.
The mappings Futbol\MainBundle\Entity\Partidos#idEquipo2 and Futbol\MainBundle\Entity\Inscripcionequipo#partido sxy2 are inconsistent with each other.

Código PHP:
 /**
     * @var \Equipo
     *
     * @ORM\ManyToMany(targetEntity="Equipo", mappedBy="partidosxy2", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_Equipo1", referencedColumnName="id")
     * })
     */
    
private $idEquipo1;

    
/**
     * @var \Equipo
     *
     * @ORM\ManyToMany(targetEntity="Equipo", mappedBy="partidosxy2", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_Equipo2", referencedColumnName="id")
     * })
     */
    
private $idEquipo2
Sabras que estoy aciendo mal?
  #8 (permalink)  
Antiguo 17/03/2014, 17:06
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Relacion n:2

Tienes en los dos lados mappedBy cuando deberias tener de un lado inversedBy, te sugiero pases por la doc de doctrine http://docs.doctrine-project.org/en/...-bidirectional
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 18/03/2014, 13:50
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Relacion n:2

Gracias Master

Al final la solución era dejarlos así:

Código PHP:

    
private $idEquipo1;

   
    private 
$idEquipo2

Es decir, sin mapeo alguno.
Gracias de nuevo
  #10 (permalink)  
Antiguo 18/03/2014, 18:04
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Relacion n:2

mmm, sin metadata no puede funcionar, estas seguro que no tienes la metadata en xml o yml ?, y te hago una sugerencia, las propiedades no deberian tener id en su nombre, es un objeto no una fila de una tabla, deberian ser $equipo1 y $equipo2 o $equipoA y $equipoB, o $local y $visitante.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 18/03/2014, 20:37
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Relacion n:2

Que tal master, la verdad me funcionaba a medias pues podía generar los campos "Entity" en el FormType sin problema. Me mandaba llamar los equipos y tal. Pero al momento de generar algún query dese la entidad "Partidos" me marcaba precisamente en la Clase Partidos no tenía una asociación en idEquipo2.

Lo que termine haciendo fue reestructurar la BD y crear una clase intermedia "EquipoPartidos" . Quería hacerlo de la otra forma para aprender a declarar ese tipo de relaciones pero me estaba llevando demasiado tiempo.

Gracias por la ayuda y la sugerencia, tomare en cuenta a futuro el nombre de las propiedades

Saludos.

Etiquetas: doctrine2, relacion
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 19:49.