Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/08/2012, 09:01
Avatar de verinchi
verinchi
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires
Mensajes: 647
Antigüedad: 20 años, 2 meses
Puntos: 2
Insertar datos en entidades vinculadas Symfony 2

Hola!
Estoy hace tiempo intentando realizar un simple insert en una de dos entidades relacionadas Many to One y no consigo lograrlo.
Les comento un poco las etapas por las que he pasado.

Primeramente, mis entidades están definidas y relacionadas de la siguiente manera:

La primera contiene tipos de pasajes
Código PHP:
class tipoPasaje
{
    
/**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    
private $id;
    
    
/**
     * @ORM\OneToMany(targetEntity="Pasaje", mappedBy="codTipopas") 
     */
    
protected $aPasaje;
    public function 
__construct()
    {
        
$this -> aPasaje = new ArrayCollection();
    }
  .... 
mas campos

La segunda, contiene los pasajes en sí, en los cuales una columna está destinada a definir su tipo

Código PHP:
class Pasaje
{
    
/**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    
private $id;

.........

/**
     * @var integer $cdTipopas
     *
     * @ORM\Column(name="cdTipopas", type="integer")
     * @return integer
     */
    
private $cdTipopas;
    
    public function 
setTipopas(tipoPasaje $cdTipopas)
    {
        
$this -> cdTipopas $cdTipopas;
    }
    public function 
getTipopas()
    {
        return 
$this -> cdTipopas;
    }
    
    
/**
     * @ORM\ManyToOne(targetEntity="tipoPasaje", inversedBy="aPasaje")
     *  @ORM\JoinColumn(name="cdTipopas", referencedColumnName="id") 
     */
    
protected $codTipopas;
....


Luego, al momento de insertar un pasaje en el controlador, dado que en este caso es conocido previamente el código de tipo de pasaje, intenté hacerlo con:

Código PHP:
$pasaje->setTipopas(1); 
Pero obtuve un mensaje de error advirtiendo que a esa columna debería pasarle un objeto en lugar de un entero.

Entonces, probé con la siguiente solución:
Código PHP:
$ip=$this->getDoctrine()->getEntityManager();
... 
asignaciones varias a otras columnas
$pasaje
->setTipopas($ip->getReference('pasajesBundle:tipoPasaje','1'));
... 
otras asignaciones

$ip
->persist($pasaje);
$ip->flush(); 
Y ahora me da el siguiente error:
ORA-01400: no se puede realizar una inserción NULL en ("UTN_DES"."PASAJE"."CDTIPOPAS")

Lo que me indica obviamente, que el objeto que estoy intentando referenciar con getReference no carga nada.

Cabe aclarar que, en la base de datos, el objeto contiene dos datos, con id 1 y 2 respectivamente. Con lo que la referencia a 1 debería existir.

Sigo buscando información pero realmente estoy desorientada... Obviamente, en algo me estoy equivocando, pero no encuentro en qué .

Alguno de ustedes podrá ayudarme a encontrar este error?

Desde ya, mil gracias a todos!
__________________
Why can't we not be sober?
www.partitorium.com.ar