如何在Symfony2中更新相关实体

时间:2014-07-02 12:50:26

标签: file symfony upload entities

我的情况是这样的,首先有一个实体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实体被保留。

希望有人处于相同的情况,可以给我一些建议,安息吧!

2 个答案:

答案 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"})
 */