Symfony2 — Обновление сущности в отношениях один-к-одному

Я пытаюсь обновить свою сущность 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();

1

Решение

Из комментариев — оказывается, это была простая опечатка $lastRun переменная. Переменная, сопоставленная с базой данных: $lastRun, но ваши настройки делают $this->lastrun;

Поскольку имена переменных в PHP чувствительны к регистру, вы просто создавали новую переменную открытого класса, но она не отображалась в базе данных. Если бы вы использовали строгий режим PHP для ошибок, он бы это поймал и выдал ошибку.

Вот обновленный код:

открытая функция setLastRun (\ DateTime $ lastRun = null)
{
$ this-> lastRun = $ lastRun;
}

0

Другие решения

Конечно, я отвечу на что-то нелепое, но я думаю, что единственное, чего не хватает в вашем коде:

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

Я надеюсь, что это решит вашу проблему!

0

По вопросам рекламы [email protected]