Ver Mensaje Individual
  #11 (permalink)  
Antiguo 17/05/2013, 01:37
amadeo123
 
Fecha de Ingreso: diciembre-2011
Mensajes: 134
Antigüedad: 12 años, 10 meses
Puntos: 5
Respuesta: Problema con Symfony2 y la carga de Fixtures en tablas intermedias autogen

Gracias a todos. Al final segui con la idea de fhederico (la de crear las entidades de las tablas intermedias ) y ya me fuciona. No me gusta nada esta solucion, hubiese preferido sacarlo usando el potencial de Doctrine, pero no me es posible perder mas tiempo en este punto.


Respecto al problema que me surgio lo comento por si alguien con el mismo fallo llega hasta aqui.


Cita:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '14-6' for key 'PRIMARY'
Vereis. Esto viene a decir que estamos duplicando el valor de una fila. Cuando tenemos tablas intermedias que se generan para conectar tablas muchos a muchos, esto es necesario, pero no pasa nada porque la clave primaria es una clave compuesta.


Me explico.

En una tabla muchos a muchos entre usuarios y alimentos tendriamos

pepe | manzanas
juan |manzanas
pepe | peras

Pepe y manzanas se repiten . No pasa nada porque la clave primaria es compuesta (pepemanzanas , juanmanzanas) pero al subir las fixtures te saldra un error porque se esta interpretando que hay valores de la misma columna que se repiten. Esto es debido a la restrinccion Unique, que impide que las claves ajenas se repitan, y en realidad nosotros tenemos 2 claves ajenas (pepe y manzanas) que sumammos para crear una propia y poder comunicar entre las tablas muchos a muchos.

Para solucionarlo debeis crear la base de datos indicandole Unique = false.

Código:
/**
    * @ORM\Id
    * @ORM\ManyToOne(targetEntity="Usuario")
    * @ORM\JoinColumn(name="usuario_id", referencedColumnName="id" , unique=false)
    */
    protected $usuario;
   
    /** 
    * @ORM\Id
    * @ORM\ManyToOne(targetEntity="Alimento") 
    * @ORM\JoinColumn(name="alimento_id", referencedColumnName="id", unique=false)
    *
    */
    protected $alimento;


Saludos.