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();

ただし、このコードは、UserJournal で user_id を null にすることはできないという SQL エラーを生成します。

$userJournal->setUser($user);このコードまたは addUserJournal() 関数で行う必要なく、これを行う方法はありませんか?

4

0 に答える 0