我的情况是这样的,首先有一个实体Person与实体Face有一个OneToMany关系(当然还有与ManyToOne相反的方式),每次我更新Person实体时,我可能会添加一些额外的Face实体对人。基本上它看起来像这样:
/**
* @ORM\OneToMany(targetEntity="Face", mappedBy="person", cascade={"persist"})
*/
private $faces;
...
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload()
{
foreach ($this->images as $image) {
if (null === $image) {
break;
}
$face = new Face();
$face->setPerson($this);
$face->setImagePath(sha1(uniqid(mt_rand(), true)));
$this->addFace($face);
}
}
当我第一次将Person与某些Face实体持久化时,这可以正常工作,但是当我尝试更新现有Person并添加更多Face实体时,我无法使它们持久存在,应该发生的一切都会发生,除了没有新的Face实体被保留。
希望有人处于相同的情况,可以给我一些建议,安息吧!
答案 0 :(得分:0)
我有一个类似的项目,调查有问题,每个问题都有一个图像。
我跟随docs here并且为了更新相关实体,我将所有逻辑移动到该实体,在您的情况下,它将成为“面部”。一切正常,我的控制器看起来像这样:
...
$survey->preUpload();
$questions = $survey->getQuestions();
foreach ($questions as $question)
{
$question->preUpload();
}
$em->persist($survey);
$em->flush();
...
希望有所帮助。
答案 1 :(得分:0)
即使在关系的另一端,您也需要指定级联持久策略。它不是自动双向的。
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="faces", cascade={"persist"})
*/