多くのジャーナル エントリを持つユーザー オブジェクトがあります。
ユーザー クラスには、次のように $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() 関数で行う必要なく、これを行う方法はありませんか?