我有一个包含许多日记条目的用户对象。
用户类包含一个 $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() 函数中做?