更新MySQL数据库Symfony2

时间:2017-09-08 11:40:47

标签: mysql symfony

我有一个MySQL数据库和前端DataTables视图并与Symfony一起工作。

我的桌子上有2个按钮。删除并编辑。 如果单击“删除”,它将从DataTables和MySqL中删除该行。使用此代码:

  /**
   * @Route("/delete/{id}", name="deletepage")
   * @Template()
   */
  public function delete($id)
  {
      $em = $this->getDoctrine()->getManager();
      $events = $em -> getRepository('AppBundle:eqAli')->find($id);
      $em -> remove($events);
      $em -> flush();

      return $this->redirectToroute('homepage');
  }

我有一个编辑按钮,可以重定向到编辑页面,该行中的数据会自动填充。 我想要实现的是,一旦用户在该页面上进行了更改并且用户单击了save,新信息将更新到MySQL。所以没有删除,而是更新。

我正在尝试使用此代码实现这一目标:

/**
 * @Route("/edit/update/{id}", name="updatepage")
 * @Template()
 */
public function update($id)
{
    $em = $this->getDoctrine()->getManager();
    $events = $em -> getRepository('AppBundle:eqAli')->find($id);
    $em -> persist($events);
    $em -> flush();

    return $this->redirectToroute('homepage');
}

但这没有任何作用。它确实获得了正确的ID,我可以点击,只是没有更新到MySQL。路径等是正确的,因为当我将persist更改为delete时,按钮会起作用。

任何解决方案?

3 个答案:

答案 0 :(得分:1)

基本上,您正在获取单个eqAli实体,命令实体管理器对其进行管理,并将对实体的所有更改刷新到数据库中。

问题是您在保存之前没有对实体进行实际更改。

答案 1 :(得分:0)

嗯......

所有应该在editAction中(没有重定向来更新必要的路由),下面你有一个工作示例,尝试在你的情况下实现它(它有点高级,但你应该抓住它的想法)。

```

 /**
 * @ParamConverter(name="reklama", class="SomeBundle:Reklamy")
 * @Template()
 * @param Request $request
 * @param Reklamy $reklama
 */
public function editAction(Request $request,Reklamy $reklama){
    $em = $this->getDoctrine()->getManager();
    $form=$this->createForm(new ReklamyType(),$reklama);
    if($request->getMethod()=="POST"){
        $form->handleRequest($request);
        if($form->isValid()){
            $em->flush();
            return $this->redirectToRoute('someroute')
        }
    }
    return array('form'=>$form->createView());
}

答案 2 :(得分:0)

您需要对找到的$events实体执行某些操作,例如:

$events = $em -> getRepository('AppBundle:eqAli')->find($id);
...
$events->modifyDate( new DateTime() );
...
$em -> persist($events);
$em -> flush();

例如,modifyDateeqAli实体的一部分方法。我在之前和之后显示...表示您可能需要对您的实体进行其他更改。在原始代码中,您根本不会更改任何内容。这就是为什么你没有看到数据库中的任何差异。