Отношение ManyToOne требуется сохранить каскад
У меня проблема при попытке вставить новую сущность.
У меня есть две сущности, EquipoControl и Modelo, соотношение:
Один equipoControl может иметь одну модель.
Это мое отношение к equipoControl
EquipoControl.php
/**
* @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() для этого неизвестного объекта, либо настройте каскадное сохранение этой ассоциации в сопоставлении, например @ManyToOne(..,cascade={"persist"}).
Мне не нужно упорствовать, я просто хочу ассоциировать
1 ответ
Ваша ассоциация отображается правильно. Вам нужно сохранить 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
ноль.
Похоже, это утверждение неправильно заполняет $equipoControl->modelo
имущество.
$formulario = $this->createForm(new EquipoControlType(array()), $equipoControl);
Вам нужно извлечь modelo
вручную сформируйте форму и установите ее в $equipoControl
объект.