【问题标题】:Update all my objects having the same name in my database更新我的数据库中所有具有相同名称的对象
【发布时间】:2017-06-15 13:14:43
【问题描述】:

我想为我的所有同名事件更新 StartDate 和 EndDate(在我的例子中,多个事件同名)

从组合框中选择事件的名称,然后选择要更新的开始日期和结束日期

updateEvents.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'))
    ;   
}

控制器:

public function updateEventsAction(Request $request )
{
    //how to recuperate $choosedName from the combobox????

$qb = $this->getDoctrine()->getManager()->createQueryBuilder();
$qb->select('e')
    ->from('AppBundle:Event', 'e')
    ->where('e.name = :choosedName')
    ->setParameter('name',$choosedName);
$events =  $qb->getQuery()->getResult();

$form = $this->createForm('AppBundle\Form\UpdateEventsType', $events);
foreach ($events as $event) {

    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $event ->setStartDate ($event ->getStartDate ());
        $event ->setEndDate ($event ->getEndDate ());
        $em->flush();
        return $this->redirectToRoute('app_event');
    }


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

【问题讨论】:

  • 这里有什么问题?错误消息或者您只需要知道如何获取 $choosedName ?

标签: database symfony doctrine twig


【解决方案1】:

您必须在表单提交后执行您的操作

public function updateEventsAction(Request $request)
        {

            $form = $this->createForm('AppBundle\Form\ UpdateEventsType ', $ events);    
            $form->handleRequest($request);
            if ($form->isSubmitted() && $form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $choosedName = $form->getData()['name'];
                $qb = $this->getDoctrine()->getManager()->createQueryBuilder();
                $qb->select('e')->from('AppBundle:Event, 'e')->where('e.name = :choosedName')->setParameter(':choosedName',$choosedName);
                $events =  $qb->getQuery()->getResult();
                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(),
            ));
            }
         }
     }

您的代码中有很多谜团: - persit 不见了 - createQueryBuilder 应该在存储库中完成 - 您的 ->setParameter('name',$choosedName) 与您在 where 中放置的内容不同步

阅读更多文档以避免所有这些错误

【讨论】:

    猜你喜欢
    • 2021-11-24
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2016-01-04
    相关资源
    最近更新 更多