我正在尝试更新我的单一任务实体,但不接受任何更改。我的事件和单一任务之间的关系是双向一对一的关系。
我的事件实体的相关部分是:
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;
}
}
我的单一任务实体的相关部分是:
/**
* @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 属性永远不会在数据库中更新。什么是不正确的?
编辑:如何创建事件的代码示例:
$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; }
我当然会回答一些荒谬的问题,但我认为您的代码中唯一缺少的是:
$this->em->persist($event);
$this->em->flush();
我希望这能解决你的问题!