在现有实体上保存新实体与关系(Symfony / Doctrine2)

时间:2017-04-27 13:57:45

标签: php symfony doctrine-orm

我想创建新的Entity SlideTranslation,并分配现有的幻灯片。 但每次实体创建时都没有Slide的ID。我可以创建SlideTranslation并将Slide指定给它,但对我来说这似乎是不好的解决方案。

$slide = $em->getRepository('Model:Slide')->find($id);

if(isset($slide)) {
    try {
        $slideTranslation = new SlideTranslation();
        $slideTranslation->setTranstable($slide);
        $slideTranslation->setLocale('uk');
        $slideTranslation->setAltText('Alt text');
        $em->persist($slideTranslation);
        $em->flush();
    } catch (Exception $e) {
        dump($e->getMessage());
    }
}

关系。

/**
 * @ORM\ManyToOne(targetEntity="Model\Entity\Slide", inversedBy="tranlations")
 * @ORM\JoinColumn(name="translatable_id", referencedColumnName="id")
 */
private $transtable;

我尝试过使用 getReference 的方法,但没有结果。也许我打破了一些模式或原则,而且这在Doctrine2中是不可能的。

1 个答案:

答案 0 :(得分:1)

你可能必须以相反的方式做到这一点

$slide = $em->getRepository('Model:Slide')->find($id);

$slideTranslation = new SlideTranslation();
$slideTranslation->setLocale('uk');
$slideTranslation->setAltText('Alt text');

$slide->addTranslation($slideTranslation);

$em->flush();

然后将级联添加到幻灯片实体,您甚至不需要保留实体翻译

/**
 * @ORM\OneToMany(targetEntity="Model\Entity\SlideTranslation", mappedBy="transtable", cascade={"persist", "remove"})
 */
 private $translations;
相关问题