2015-01-01 4 views
1

변경 사항이 적용되지 않지만 SingleTask 엔티티를 업데이트하려고합니다. My Event와 SingleTask 사이의 관계는 양방향 일대일 관계입니다. Symfony2 - 일대일 관계로 엔티티 업데이트

내 이벤트 개체의 관련 부분

은 다음과 같습니다

class Event 
{ 
    // properties 

    /** 
    * @OneToOne(targetEntity="SingleTask", mappedBy="event", cascade={"persist", "remove"}) 
    */ 
    private $singletask; 

    public function setSingleTask(SingleTask $singletask) 
    { 
     $this->singletask = $singletask; 
     $singletask->setEvent($this); 
    } 

    public function getSingleTask() 
    { 
     return $this->singletask; 
    } 
} 

내 SingleTask 엔티티의 관련 부분은 다음과 같습니다 별도의 명령 파일에서

/** 
* @Entity 
*/ 
class SingleTask 
{ 
    /** 
    * @Column(type="datetime", nullable=true) 
    */ 
    private $lastRun; 

    /** 
    * @OneToOne(targetEntity="Event", inversedBy="singletask") 
    * @JoinColumn(name="event_id", referencedColumnName="id", nullable=true) 
    **/ 
    private $event; 

    public function setLastRun(\DateTime $lastRun = null) 
    { 
     $this->lastrun = $lastRun; 
    } 
} 

:

$eventRepo = $this->em->getRepository('HeyRemy\HeyRemyBundle\Entity\Event'); 
$events = $eventRepo->findAll(); 

foreach ($events as $event) 
{ 
    $singletask = $event->getSingleTask(); 

    if ($singletask != null) 
    { 
     $singletask->setLastRun(new \DateTime); 
     $event->setSingleTask($singletask); 

     $this->em->flush(); 
    } 
} 

불행하게도 SingleTask의 lastRun 속성은 데이터베이스에서 업데이트되지 않습니다. 올바르지 않은 것은 무엇입니까?

편집 : 이벤트 만드는 방법의 코드 샘플 :

$event = new Event(); 
$userRepo = $this->em->getRepository('HeyRemyBundle:User'); 
$user = $userRepo->find($user_id); 
$event->setUser($user); 

$this->em->persist($event); 
$this->em->flush(); 

$event_id = $event->getId(); 

// other code which uses $event_id (SingleTask does not) 

$singletask = new SingleTask(); 
$singletask->setNextRun($event_start); 

$this->em->persist($singletask); 

$event->setSingleTask($singletask); 

$this->em->flush(); 
+0

이미 singletask 개체가있는 경우 다시 가져 오는 이유는 무엇입니까? –

+0

@JasonRoman 좋은 관찰. SingleTask 객체의 중복 가져 오기를 제거하고 위의 질문에서 코드를 업데이트했습니다. 결과에 변화가 없습니다 (SingleTask 데이터베이스 행이 변경되지 않음). –

+0

이벤트 작성 방법에 관해 더 많은 코드를 게시 할 수 있습니까? 이벤트가 이미 존재하는 경우에는 '일시 중지'를 다시 호출 할 필요없이 '플러시'만 호출하면됩니다. 또한,'$ event'에서 이미 그것을 잡았으므로'-> setSingleTask'라고 말할 필요가 없습니다. –

답변

0

의견 - 이것은 $lastRun 변수의 간단한 오타 였음이 밝혀졌습니다. 데이터베이스에 매핑 된 변수는 $lastRun이지만 설정은 $this->lastrun;

입니다. PHP에서는 변수 이름이 대소 문자를 구분하므로 단순히 새로운 공용 클래스 변수를 만들었지 만 데이터베이스에 매핑되지 않았습니다. PHP의 엄격 모드를 사용하여 오류를 발견했다면 오류가 발생했을 것입니다. 여기

는 업데이트 된 코드입니다 :

공공 기능 setLastRun (\ 날짜 시간 $ LASTRUN = NULL) { $ this-> LASTRUN = $ LASTRUN; }

0

는 확실히 뭔가 터무니없는 대답하지만, 내가 유일한 코드에서 실종 생각은 다음과 같습니다

$this->em->persist($event); 
$this->em->flush(); 

나는 희망 이것은 당신의 문제를 해결할 것입니다!

+0

불행히도 그 일은하지 않았습니다. –

+0

출력물이 있습니까? – Kern

관련 문제