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; }