2012-12-10 2 views
1

의 사용 후에도 지속되지 않습니다. Symfony 2.1에 문제가 있으며 데이터베이스에 지속되는 날짜가 있습니다. 나는 PHP 5.3을 사용한다. 내 코드는 다음과 같습니다 :symfony 2.1 날짜가 -> 수정 메소드

public function moveAction() 
    { 
     $request = $this->getRequest(); 

     $id = $request->get('id'); 
     $daydelta = $request->get('daydelta'); 
     $minutedelta = $request->get('minutedelta'); 

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

     $entity = $em->getRepository('MedSystemTimetableBundle:Appointment')->find($id); 

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

      if (0 != $daydelta) { 

      $day = ($daydelta > 0) ? '+'.$daydelta : $daydelta; 
      $day .= (abs($daydelta) == 1) ? ' day' : ' days'; 

      $modifyFrom = $entity->getTimeFrom()->modify($day); 
      $modifyTo = $entity->getTimeTo()->modify($day); 

      $entity->setTimeFrom($modifyFrom); 
      $entity->setTimeTo($modifyTo); 
     } 
     if (0 != $minutedelta) { 

      $month = ($minutedelta > 0) ? '+'.$minutedelta : $minutedelta; 
      $month .= (abs($minutedelta) == 1) ? ' minute' : ' minutes'; 

      $modifyFrom = $entity->getTimeFrom()->modify($month); 
      $modifyTo = $entity->getTimeTo()->modify($month);   

      $entity->setTimeFrom($modifyFrom); 
      $entity->setTimeTo($test); 
     } 

     $em->flush(); 

     return new Response('ok', 200); 
    } 

새로운 시간 값을 덤프하고 올바르게 변경하지만 어떤 이유로 데이터베이스에 저장되지 않습니다. 하지만 new \ DateTime 값을 설정하면 잘 작동합니다. 이 이상한 행동에 대한 아이디어가 있습니까?

+0

왜'gedmo'' timestampable' doctrine 확장 기능을 사용하지 않습니까? 이벤트 리스너가 자동으로 지속됩니다. –

+0

현재 날짜는 저장하지 않지만 캘린더는 매우 구체적인 날짜를 저장하려고합니다. 이 경우 타임 스탬프 가능은 적용 할 수 없습니다. – kathrine0

답변

0

코드를 검사했습니다. 그리고 당신은 그 진실을 놓치고 있습니다. 그냥 앞에 추가하십시오. flush()

$em->persist($entity); 

잘하면 도움이되기를 바랍니다.

+0

항목을 업데이트하는 동안 지속은 필요하지 않습니다. 새 항목을 만들 때만 필요합니다. – kathrine0

2

해결책을 찾았습니다. 내가 참고 문헌을 작성해 왔기 때문에 그 교리는 그 변화를 보지 못했습니다. 대답은 객체를 복제 한 다음 수정하는 것입니다. 올바른 코드는 다음과 같습니다 :

public function moveAction() 
{ 
    $request = $this->getRequest(); 

    $id = $request->get('id'); 
    $daydelta = $request->get('daydelta'); 
    $minutedelta = $request->get('minutedelta'); 

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

    $entity = $em->getRepository('MedSystemTimetableBundle:Appointment')->find($id); 

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

     if (0 != $daydelta) { 

     $day = ($daydelta > 0) ? '+'.$daydelta : $daydelta; 
     $day .= (abs($daydelta) == 1) ? ' day' : ' days'; 

     $modifyFrom = clone $entity->getTimeFrom(); 
     $modifyTo = clone $entity->getTimeTo(); 

     $entity->setTimeFrom($modifyFrom->modify($day)); 
     $entity->setTimeTo($modifyTo->modify($day)); 
    } 
    if (0 != $minutedelta) { 

     $month = ($minutedelta > 0) ? '+'.$minutedelta : $minutedelta; 
     $month .= (abs($minutedelta) == 1) ? ' minute' : ' minutes'; 

     $modifyFrom = clone $entity->getTimeFrom(); 
     $modifyTo = clone $entity->getTimeTo();   

     $entity->setTimeFrom($modifyFrom->modify($month)); 
     $entity->setTimeTo($test)->modify($month); 
    } 

    $em->flush(); 

    return new Response('ok', 200); 
} 
관련 문제