변경 사항이 적용되지 않지만 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();
이미 singletask 개체가있는 경우 다시 가져 오는 이유는 무엇입니까? –
@JasonRoman 좋은 관찰. SingleTask 객체의 중복 가져 오기를 제거하고 위의 질문에서 코드를 업데이트했습니다. 결과에 변화가 없습니다 (SingleTask 데이터베이스 행이 변경되지 않음). –
이벤트 작성 방법에 관해 더 많은 코드를 게시 할 수 있습니까? 이벤트가 이미 존재하는 경우에는 '일시 중지'를 다시 호출 할 필요없이 '플러시'만 호출하면됩니다. 또한,'$ event'에서 이미 그것을 잡았으므로'-> setSingleTask'라고 말할 필요가 없습니다. –