我想创建新的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中是不可能的。
答案 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;