Я пытаюсь обновить свою сущность SingleTask, но изменения не принимаются. Отношения между моим Event и SingleTask — это двусторонние отношения один-к-одному.
Соответствующие части моей сущности события:
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();
}
}
К сожалению, свойство lastRun для SingleTask никогда не обновляется в базе данных. Что не правильно?
Изменить: Примеры кода того, как я создаю событие:
$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();
Из комментариев — оказывается, это была простая опечатка $lastRun
переменная. Переменная, сопоставленная с базой данных: $lastRun
, но ваши настройки делают $this->lastrun;
Поскольку имена переменных в PHP чувствительны к регистру, вы просто создавали новую переменную открытого класса, но она не отображалась в базе данных. Если бы вы использовали строгий режим PHP для ошибок, он бы это поймал и выдал ошибку.
Вот обновленный код:
открытая функция setLastRun (\ DateTime $ lastRun = null)
{
$ this-> lastRun = $ lastRun;
}
Конечно, я отвечу на что-то нелепое, но я думаю, что единственное, чего не хватает в вашем коде:
$this->em->persist($event);
$this->em->flush();
Я надеюсь, что это решит вашу проблему!