2013-04-14 8 views
0

를 업데이트하지.Doctrine2하지 나에게 오류를 제공 내가 할, 날짜 시간 필드를 업데이트하려고하지만를 업데이트하지 .. 나는 내가 해결책을 찾을 수없는 버그를 발견 한 생각</p> <p>을 날짜 시간

다른 모든 필드를 이동하면 해당 필드가 올바르게 수정되지만 datetime 필드는 변경되지 않습니다.

$em = $this->getDoctrine()->getManager(); 
$entity = $em->getRepository('MyOwnBundle:Events')->find($id); 
$In = $entity->getDateIn(); 
$In->modify('+1 day'); 
$entity->setDateIn($In); 
$em->flush(); 

또한 DateTime() 개체를 직접 삽입하려고했지만 전혀 업데이트하지 않았습니다.

$entity->setDateIn(new \DateTime()); 

이 문제를 해결할 수있는 방법이 있습니까?

내가 심포니 2.1 교리를 설치 2.3.3

편집 이벤트 개체 :

/** 
* Events 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="My\OwnBundle\Entity\EventsRepository") 
*/ 
class Events 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=100) 
*/ 
private $name; 

/** 
* @var string 
* 
* @ORM\Column(name="description", type="text") 
*/ 
private $description; 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="dateIn", type="datetime") 
*/ 
private $dateIn; 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="dateOut", type="datetime") 
*/ 
private $dateOut; 

.... 

/** 
* Set dateIn 
* 
* @param \DateTime $dateIn 
* @return Events 
*/ 
public function setDateIn($dateIn) 
{ 
    $this->dateIn = $dateIn; 

    return $this; 
} 

/** 
* Get dateIn 
* 
* @return \DateTime 
*/ 
public function getDateIn() 
{ 
    return $this->dateIn; 
} 

/** 
* Set dateOut 
* 
* @param \DateTime $dateOut 
* @return Events 
*/ 
public function setDateOut($dateOut) 
{ 
    $this->dateOut = $dateOut; 

    return $this; 
} 

/** 
* Get dateOut 
* 
* @return \DateTime 
*/ 
public function getDateOut() 
{ 
    return $this->dateOut; 
} 

.... 
+0

"오류가 발생합니다"- 무슨 오류가 있습니까? –

+0

죄송합니다. 작성하는 데 잘못되었습니다. 오류를 반환하지 마십시오! –

+0

'Events' 엔티티 정의를 보여줄 수 있습니까? – cheesemacfly

답변

0

엔티티를 잘하지만, 당신은 $ 보하기로 엔티티를 지속 할 필요가> 지속 ($ 엔티티) datetime이 참조로 전달되기 때문에 날짜를 다시 설정할 필요가 없습니다.

$em = $this->getDoctrine()->getManager(); 
$entity = $em->getRepository('MyOwnBundle:Events')->find($id); 
$entity->getDateIn()->modify('+1 day'); 
$em->persist($entity); 
$em->flush(); 
+1

사실, 이미 저장된 엔티티 (이미 데이터베이스에있는 엔티티)의 persist() 호출은 그의 구성에서 필요하지 않습니다. –

+0

이것은 저에게 새로운 것입니다. 감사합니다. –

3

수정() 메소드는 Doctrine이 DateTime 객체를 참조로 추적하기 때문에 엔티티를 업데이트하지 않습니다. 기존의 DateTime 객체를 복제하여 새 참조를 제공해야합니다. 새 것을 수정 한 다음 새로운 타임 스탬프로 설정하십시오.

자세한 내용은 Doctrine Documentation의 기사를 참조하십시오.

+0

링크의 중요한 점을 요약 해 주시겠습니까? – rapvelopment