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!