尝试插入新实体时遇到问题。
我有两个实体,EquipoControl和Modelo,关系是:
一个equipoControl可以有一个型号。
这是我与equipoControl的关系
/**
* @ORM\ManyToOne(targetEntity="Agc\ManagerBundle\Entity\Modelo", fetch="EAGER")
* @ORM\JoinColumn(name="idModelo", referencedColumnName="idModelo")
* @Assert\NotNull()
* @Assert\NotBlank(message = "Por favor, escribe el modelo")
*/
protected $modelo;
在我的实体模型中,我对这段关系一无所知。
$emDefault = $this->getDoctrine()->getManager();
$em = $this->getDoctrine()->getManager("customer_1");
$equipoControl = new EquipoControl();
$actividad = $em->getRepository('AgcManagerBundle:Actividad')
->findOneBy(array('idActividad' => $idActividad));
$formulario = $this->createForm(new EquipoControlType(array()), $equipoControl);
$formulario->handleRequest($request);//Este metodo asocia los datos del formulario a nuestro objeto
if ($formulario->isValid()) {
//$idEquipoControl = $equipoControl->getIdEquipoControl();
//Necesito comprobar que el equipo no existe y no está instalado en otra actividad
$equipoControlExiste=$emDefault->getRepository('AgcManagerBundle:EquipoControl')->findOneBy(array('codigo'=>$equipoControl->getCodigo()));
if (! $equipoControlExiste) {//SI EL EQUIPO NO EXISTE
$equipoControl->setInstaladoEn($user->getAdministracion()->getIdAdministracion()."_".$idActividad);
$emDefault->persist($equipoControl);
$emDefault->flush();
$equipoActividad = new EquiposActividades();
$equipoActividad->setEquipoControl($equipoControl);
$actividadObj=$em->getRepository('AgcManagerBundle:Actividad')->findOneBy(array('idActividad'=>$idActividad));
$equipoActividad->setActividad($actividadObj);
$equipoActividad->setIdUsuario($user->getIdUser());
$tipoTransmision = new TipoTransmision();
$tipoTransmision->setIdTipoTransmision(0);
$protocolo = new Protocolo();
$protocolo->setIdProtocolo(0);
$equipoActividad->setTipoTransmision($tipoTransmision);
$equipoActividad->setProtocolo($protocolo);
$em->persist($equipoActividad);
$em->flush();
$message='El equipo se ha instalado convenientemente...Puede realizar su configuración.';
$this->get('session')->getFlashBag()->add('success',$message);
return $this->redirect($this->generateUrl('agc_asistente_actividad', array("paso" => "4"))."?equipoactividad=".$equipoActividad->getIdEquipoActividad());//Redireccion a otro sitio
}
当我在表单中插入新的EquipoControl时,请跳过错误:
通过这种关系找到了一个新的实体 那个没有的'Agc \ ManagerBundle \ Entity \ EquipoControl#modelo' 配置为级联实体的持久化操作:ESD 123SR。至 解决此问题:显式调用EntityManager#persist()on 这个未知的实体或配置级联持久存在此关联 映射例如@ManyToOne(..,cascade = {“persist”})。
我不需要坚持,我只想联想
答案 0 :(得分:0)
您的关联已正确映射。在保留Modelo
实体之前,您需要保留EquipoControl
实体。
最有可能发生的事情是,与Modelo
相关联的EquipoControl
尚未存在或尚未保留。因此,学说不能坚持这种关联,并建议你级联。
<强>更新强>
如果您已在数据库中保留Modelo
个实体,则需要先加载Modelo
,然后将其关联到EquipoControl
。
<强> 实施例 强>
...
$entityManager = new EntityManager();
$equipo = new EquipoControl();
$modelo = $entityManager->find('Modelo', 1234);
$equipo->setModelo($modelo);
$entityManager->persist();
$entityManager->flush();
...
<强> UPDATE2:强>
问题是由于您尝试保留EquipoControl
具有属性$modelo
null的实例。
看起来这句话没有正确填充$equipoControl->modelo
属性。
$formulario = $this->createForm(new EquipoControlType(array()), $equipoControl);
您需要从表单中手动提取modelo
并将其设置在$equipoControl
对象中。