0

我有一个包含许多日记条目的用户对象。

用户类包含一个 $userJournals 属性和所需的添加/删除函数,如下所示:

class User{
   ....
   /**
   * @var \Doctrine\Common\Collections\ArrayCollection
   *
   * @ORM\OneToMany(targetEntity="models\UserJournal", mappedBy="user", cascade={"persist"})
   */
   protected $userJournals;
   ....

   public function addUserJournal(\models\UserJournal $userJournal)
   {
          $this->userJournals->add($userJournal);
          return $this;
   }
 }

UserJournal 类包含 User 对象,以及它的 getter/setter。$user 的注释在这里:

   class UserJournal
   {
   /**
   * @var models\User
   *
   * @ORM\ManyToOne(targetEntity="models\User", inversedBy="userJournals", cascade={"persist"})
   * @ORM\JoinColumns({
   *   @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
   * })
   */
   protected $user;
}

我的理解是级联持久化使得我不必在 UserJournal 上设置用户,我只需将 UserJournal 添加到用户,保存用户,它就会工作。

    $user = $this->getRepository('User')->find(1);

    $userJournal = new models\UserJournal();
    $userJournal->setText('testCode');
    $user->addUserJournal($userJournal);
    $em->persist($user);
    $em->flush();

但是,此代码会产生 SQL 错误,即 UserJournal 上的 user_id 不能为空。

有没有办法做到这一点而不必$userJournal->setUser($user);在这段代码或 addUserJournal() 函数中做?

4

0 回答 0