我有以下代碼:爲什麼我需要刪除(後刷新()),堅持()之前,在教義
//Delete old existing file(s)
$files = $record->getFiles();
foreach ($files as $file) {
$em->remove($file);
}
$em->flush();
$link = $record->getLink() ? $record->getLink() : new Link();
$link->setRecord($record);
$link->setUrl($metaData['location']);
$em->persist($link);
$em->flush();
我需要調用第一flush()
否則$file
實體不會被刪除..爲什麼他們不會被第二個flush()
刪除?
僅供參考,這裏是Record
的關係定義:
/**
* @var \AppBundle\Entity\Link
*
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Link", cascade={"persist"}, mappedBy="record")
*/
private $link;
/**
* @var \AppBundle\Entity\File
*
* @ORM\OneToMany(targetEntity="AppBundle\Entity\File", cascade={"persist"}, mappedBy="record")
*/
private $files;
此外,該代碼使用單一的flush()工作正常(它刪除,而不是一對多一個OneOnOne實體):
//Delete old existing link
$link = $record->getLink();
if ($link) {
$em->remove($link);
}
$file = $record->getFile() ? $record->getFile() : new File();
$file->setRecord($record);
$em->persist($file);
$em->flush();
'$ files'屬性上'orphanRemoval = true'怎麼辦? 然後你有一個文件'集合',你可以重置,如果需要'記錄'實體刷新 – ceadreak
孤兒不起作用,問題在於'cascade = {「persist」}'文件。我會做更多的調試,看看我能否弄清楚 – Oli