2013-04-25 63 views
1

我有以下问题:异常行为

我想保存对象在数据库中前检查一番:

这里我的控制器:

/** 
* Edits an existing Document entity. 
* 
* @Route("/{id}", name="document_update") 
* @Method("PUT") 
* @Template("ControlBundle:Document:edit.html.twig") 
*/ 
public function updateAction(Request $request, $id) { 
     $em = $this->getDoctrine()->getManager();  
     $entity = $em->getRepository('ControlBundle:Document')->find($id); 

     if (!$entity) { 
      throw $this->createNotFoundException('Unable to find Document entity.'); 
     } 

     $deleteForm = $this->createDeleteForm($id); 
     $editForm = $this->createForm(new DocumentType(), $entity); 
     $editForm->bind($request); 

     if ($editForm->isValid()) { 
      $document = $em->getRepository('ControlBundle:Document')->findOneBy(array(
      'id' => $id, 
      )); 

      if ($document->getCount() > 100) 
       $em->flush(); 
     } 

     return array(
     'entity' => $entity, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    ); 
    } 
在我的数据库

我有:

id count ....... 
23 110 
在我的形式我编辑

id count ....... 
23 34 

,但是当我这样做:

$document = $em->getRepository('ControlBundle:Document')->findOneBy(array(
    'id' => $id, 
)); 

//here $document->getCount() return 34; ------WHY? should return 110!!! 
if ($document->getCount() > 100) 
    $em->flush(); 

问候:d

+0

首先,你从请求绑定'$ document',然后你从数据库中尚未持久值覆盖它。而且它还没有持续下去,因为你现在没有冲洗它。我不明白你为什么要覆盖'$ document',你应该删除这行'$ document = $ em-> getRepository('ControlBundle:Document') - > findOneBy(array('id'=> $ id,) );'然后应该工作。 – timaschew 2013-04-25 07:04:44

回答

2

主义实体管理器已经管理这个实体(文档与ID = 23),并且它不会重新第二次从数据库加载数据时,它只是使用它已经管理的实体,其数值已被替换为34的形式...

试试这个:

/** 
    * Edits an existing Document entity. 
    * 
    * @Route("/{id}", name="document_update") 
    * @Method("PUT") 
    * @Template("ControlBundle:Document:edit.html.twig") 
    */ 
public function updateAction(Request $request, $id) { 
    $em = $this->getDoctrine()->getManager();  
    $entity = $em->getRepository('ControlBundle:Document')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Document entity.'); 
    } 

    $lastCountValue = $entity->getCount(); 

    $deleteForm = $this->createDeleteForm($id); 
    $editForm = $this->createForm(new DocumentType(), $entity); 
    $editForm->bind($request); 

    if ($editForm->isValid() && lastCountValue > 100) { 
     $em->flush(); 
    } 

    return array(
    'entity' => $entity, 
    'edit_form' => $editForm->createView(), 
    'delete_form' => $deleteForm->createView(), 
); 

}

+0

谢谢你我的朋友!那就对了! – rpayanm 2013-04-25 16:00:00