我有以下代码:为什么我需要删除(后刷新()),坚持()之前,在教义
//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