Обновите сущность значениями формы Symfony2 Framework - PullRequest
1 голос
/ 25 января 2012

Я использую Symfony2 Framework и хочу обновить сущность данными из формы.

Я использую тот же контроллер для заполнения формы некоторыми данными, и в то же время я использую его для выполнения запроса на обновление в базе данных. Если я использую $ em-> persist ($ foo), он сохраняет именно то, что я хочу, но я не хочу сохранять его, как новые данные, я хочу обновить.

Читая книгу symfony2, она говорит, что $ em-> flush () - это все, что нам нужно, чтобы мы могли обновить.

Я думаю, что я действительно близко, но, конечно, я что-то упускаю.

Вот код:

public function actualizarCurriculoAction($id){

  $curriculo = new Curriculittle();
  $form = $this->createForm(new CurriculittleType(), $curriculo);
  $request = $this->getRequest();

  if ($request->getMethod() == 'POST') {

     $form->bindRequest($request);

     $lselect=$this->get('request')->request->get('lselect');
     $edad=$this->get('request')->request->get('edad');
     $estado=$this->get('request')->request->get('estadoselect'); 

     if ($form->isValid()) {


        $curriculo->setUsalentes($lselect);
        $curriculo->setEdad($edad);
        $curriculo->setEstado($estado);    

        $em = $this->getDoctrine()->getEntityManager();
        /*em->persist($curriculo);*/ 

        $em->flush(); /*the above line is in comment because I just want to update*/

                            /*At this point the entity should be updated, but it's not*/

        /*Llamando a la plantilla de listados*/
        $curriculos = $em->getRepository('SofLaSoflaBundle:Curriculittle')->findAll();

        /*Enviando los datos a la plantilla y Renderizandola*/
        return $this->render('SofLaSoflaBundle:Default:listado.html.twig', array('curriculos' => $curriculos));
     }
  }

  $em = $this->getDoctrine()->getEntityManager();
  $trabajador=$em->getRepository('SofLaSoflaBundle:Curriculittle')->find($id);
  return $this->render('SofLaSoflaBundle:Default:curriculo.html.twig', array('form' => $form->createView(), 'curriculo' => $trabajador));
}

Так что, нужна помощь с этим, пожалуйста. :)

1 Ответ

5 голосов
/ 26 января 2012

В вашем примере вы создаете новую сущность для начала:

$curriculo = new Curriculittle();

Так как это не существующая сущность (например, та, которую вы получили с помощью запроса к базе данных)), вызов $em->persist($curriculo) с последующим $em->flush() сохранит эту сущность как новый элемент. обновить нечем, так как объект является новым.

Тот же код для сохранения и сброса может использоваться для обновления существующего объекта;вам просто нужно сначала получить / получить существующую сущность, а не создавать новую.В настоящее время похоже, что вы делаете это в конце метода:

$trabajador=$em->getRepository('SofLaSoflaBundle:Curriculittle')->find($id);

, однако вы должны сделать это до привязки вашей формы, например:

public function actualizarCurriculoAction($id) {

  $em = $this->getDoctrine()->getEntityManager();
  $curriculo = $em->getRepository('SofLaSoflaBundle:Curriculittle')->find($id);
  if (!$curriculo) {
    $curriculo = new Curriculittle();
  }
  $form = $this->createForm(new CurriculittleType(), $curriculo);
  $request = $this->getRequest();

  if ($request->getMethod() == 'POST') {
     $form->bindRequest($request);

     $lselect=$this->get('request')->request->get('lselect');
     $edad=$this->get('request')->request->get('edad');
     $estado=$this->get('request')->request->get('estadoselect'); 

     if ($form->isValid()) {
        $curriculo->setUsalentes($lselect);
        $curriculo->setEdad($edad);
        $curriculo->setEstado($estado);    

        $em->persist($curriculo);
        $em->flush();

        /*Llamando a la plantilla de listados*/
        $curriculos = $em->getRepository('SofLaSoflaBundle:Curriculittle')->findAll();

        /*Enviando los datos a la plantilla y Renderizandola*/
        return $this->render('SofLaSoflaBundle:Default:listado.html.twig', array('curriculos' => $curriculos));
     }
  }

  return $this->render('SofLaSoflaBundle:Default:curriculo.html.twig', array('form' => $form->createView(), 'curriculo' => $curriculo));
}

Этот пример (отрегулировать в соответствии с требованиями) начнет поиск сущности, а затем свяжет отправку формы с этой сущностью.Если сущность существует, она будет обновлена.Если нет, он будет сохранен как новый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...