2017-06-29 76 views
1

我想更新通过更新的开始和结束日期相同名字我的所有事件,更新不工作使用学说

我以前张贴的问题,但现在我已经改变了一些代码,但仍不工作?

代码重定向到app_event路线没有更新!

错误在哪里?

Controller.php这样:

public function updateEventsAction(Request $request) 
{ 
    $form = $this->createForm('AppBundle\Form\UpdateEventType'); 
    $form->handleRequest($request); 
$event_name=$form[name]->getData(); 
$choosedName = $event_name->getName(); //get name from combobox 


    $em = $this->getDoctrine()->getManager(); 

    $repository = $this 
     ->getDoctrine() 
     ->getManager() 
     ->getRepository('AppBundle:Event') 
    ; 
    $events = $repository->findBy(
     array('name' => $choosedName) // array of events have same name choosen from combobox 

    ); 
     if ($form->isSubmitted() && $form->isValid()) { 

      //foreach event update start and end dates 
      foreach ($events as $event) { 


      $event ->setStartDate($event ->getStartDate()); 
      $event ->setEndDate($event ->getEndDate()); 

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

      } 

      return $this->redirectToRoute(‘app_event’); 
    } 
    return $this->render('AppBundle:Event:updateEvents.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 

Event.html.twig

{{ form_start(form}} 

<div> 
    <label for="name">Name of the event</label> 
    <div > {{ form_widget(form.name}} </div> 
</div> 
<div > 
    <label for="startDate ">Start date </label> 
    <div > {{ form_widget(form.startDate }} </div> 
</div> 
<div> 
    <label for=" EndDate ">End date </label> 
    <div> {{ form_widget(form. endDate}} </div> 
</div> 
    <div> 
     <button type="submit" ">Update</button> 
    </div> 
</div> 

{{ form_end(form) }} 

UpdateEventsType.php:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add(' name ',EntityType::class,array(
     'class' => 'AppBundle: Event', 'choice_label'=>'name') ) 
     ->add(' startDate ', DateType::class, array(
      'widget' => 'single_text', 
      // this is actually the default format for single_text 
      'format' => 'yyyy-MM-dd')) 
     ->add(' endDate ', DateType::class, array(
      'widget' => 'single_text', 
      // this is actually the default format for single_text 
      'format' => 'yyyy-MM-dd')) 
    ; 
} 

更新

现在我已经更新了我的代码,它似乎是一个日期格式问题,因为更新我的代码后,这是错误:

An exception occurred while executing 'UPDATE event SET startDate = '$ choosedStartDate ', endDate = '$ choosedEndDate ' WHERE name = ?' with params ["Events16"]: 

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '$choosedDateDebut' for column startDate at row 1 

这是新的代码

public function updateEventsAction(Request $request) 
{ 
    $form = $this->createForm('AppBundle\Form\UpdateEventType'); 
    $form->handleRequest($request); 


     if ($form->isSubmitted() && $form->isValid()) { 
      $event_name=$form['name']->getData(); 
      $choosedName = $event_name->getName(); 

      $choosedStartDate=$form[startDate]->getData(); 


      $choosedEndDate =$form[endDate]->getData(); 





      print_r("***********choosed Start date****************"); print_r($choosedStartDate); 
      print_r("***********choosed end date****************"); print_r($choosedEndDate 


      $em = $this->getDoctrine()->getManager(); 

      $repository = $this 
       ->getDoctrine() 
       ->getManager() 
       ->getRepository('AppBundle:Event) 
      ; 
      $listevents= $repository->findBy(

       array('name' => $choosedName) // Critere 
      ); 


      foreach ($listevents as $event) { 

       $datestart_bd =$event->getDateDebut(); 

       print_r("Start date from database"); 
       print_r($datestart _bd); 
      } 

      $q = $em->createQuery('update AppBundle\Entity\Event e SET e.startDate =\'$choosedStartDate \' , e.endDate =\'$choosedEndDate \' WHERE e.name= ?1'); 
      $q->setParameter(1, $choosedName); 
      $q->execute(); 

      return $this->redirectToRoute('app_event'); 
    } 
    return $this->render('AppBundle:Event:updateEvents.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 

更新2

现在的代码工作正常我没有使用createQuery任何更

我的代码工作:

public function updateEventsAction(Request $request) 
{ 
    $form = $this->createForm('AppBundle\Form\UpdateEventType'); 
    $form->handleRequest($request); 
$event_name=$form[name]->getData(); 
$choosedName = $event_name->getName(); //get name from combobox 
    $choosedStartDate=$form[‘startDate’]->getData(); 


      $choosedEndDate =$form[‘endDate’]->getData(); 

    $em = $this->getDoctrine()->getManager(); 

    $repository = $this 
     ->getDoctrine() 
     ->getManager() 
     ->getRepository('AppBundle:Event') 
    ; 
    $events = $repository->findBy(
     array('name' => $choosedName) // array of events have same name choosen from combobox 

    ); 
     if ($form->isSubmitted() && $form->isValid()) { 

      //foreach event update start and end dates 
      foreach ($events as $event) { 


      $event ->setStartDate($choosedStartDate) 
      $event ->setEndDate($choosedEndDate); 

       $em->flush(); 

      } 

      return $this->redirectToRoute(‘app_event’); 
    } 
    return $this->render('AppBundle:Event:updateEvents.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 
+1

只需使用一些'dump($ something)'调试输出来查看最新的错误,并查看Symfony分析器以查看是否有一些错误。阅读[如何创建一个最小,完整和可验证的示例](http://stackoverflow.com/help/mcve)并相应地将问题更新到[如何提问](http://stackoverflow.com/help/)如何提问)指令。 –

回答

0

你是同一日期,你把他们从数据库中,当你可能想从形式将它们设置为事件。

变化的代码段:上batch processing

foreach ($events as $event) { 
     //$event_name variable holds your form data 
     $event->setStartDate($event_name->getStartDate()); 
     $event->setEndDate($event_name->getEndDate()); 

     $em->persist($event);//note that you only need to persist new events, so this is unnecesarry 
     $em->flush();//I'd recommend 'batch' flushes 
} 

更多信息。