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

4

1 に答える 1

2

Doctrine Entity Managerはすでにこのエンティティ(ID=23 のドキュメント) を管理しており、2 回目にデータベースからデータを再ロードすることはありません。フォームでカウント値が 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(),
 );

}

于 2013-04-25T06:26:58.493 に答える