Symfony2 - 更新一对一关系中的实体
Symfony2 - Updating an entity in a one-to-one relationship
我正在尝试更新我的 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();
}
}
不幸的是,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();
我当然会回答一些荒谬的问题,但我认为您的代码中唯一缺少的是:
$this->em->persist($event);
$this->em->flush();
希望这能解决您的问题!
从评论中可以看出,这是 $lastRun
变量的简单拼写错误。映射到数据库的变量是$lastRun
,但是你的设置是$this->lastrun;
由于变量名在 PHP 中区分大小写,您只是创建了一个新的 public class 变量,但并未映射到数据库。如果您使用 PHP 的严格错误模式,它会发现并抛出错误。
这是更新后的代码:
public 函数 setLastRun(\DateTime $lastRun = null)
{
$this->lastRun = $lastRun;
}
我正在尝试更新我的 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();
}
}
不幸的是,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();
我当然会回答一些荒谬的问题,但我认为您的代码中唯一缺少的是:
$this->em->persist($event);
$this->em->flush();
希望这能解决您的问题!
从评论中可以看出,这是 $lastRun
变量的简单拼写错误。映射到数据库的变量是$lastRun
,但是你的设置是$this->lastrun;
由于变量名在 PHP 中区分大小写,您只是创建了一个新的 public class 变量,但并未映射到数据库。如果您使用 PHP 的严格错误模式,它会发现并抛出错误。
这是更新后的代码:
public 函数 setLastRun(\DateTime $lastRun = null) { $this->lastRun = $lastRun; }