教义删除必须进行两次
Posted
技术标签:
【中文标题】教义删除必须进行两次【英文标题】:doctrine deleting has to be done twice 【发布时间】:2020-11-11 13:46:43 【问题描述】:我有以下数据库结构和关系:
Posts -> OneToMany,cascade="persist" -> Replies -> OneToMany,cascade="persist" -> 文件实体 + 磁盘上的文件 -> 事件删除文件实体
帖子 -> OneToMany,cascade="persist" -> 文件实体 + 磁盘上的文件 -> 事件 删除文件实体
关于文件的事情是:
删除文件实体(从应用程序)删除磁盘上的文件 (从文件管理器)删除磁盘上的文件会触发删除文件实体的事件我需要的是,如果帖子被删除,它会一直级联到删除回复、文件实体及其在磁盘上的文件。事件链是:
-
页面控制器:
post->remove();
-
岗位类:
remove()
PostFile::deleteFiles($this);
Reply::deleteFiles($this);
$em->remove($this);
$em->flush();
-
邮政文件:
deleteFiles($post)
$files = $post->getFiles()->toArray();
foreach ($files as $file)
$f->delete();
-
回复:
deleteFiles($post)
$replies = $post->getReplies()->toArray();
foreach ($replies as $reply)
if ($reply)
ReplyFile::deleteFiles($reply);
-
回复文件:
deleteFiles($reply)
$files = $reply->getFiles()->toArray();
foreach ($files as $file)
$f->delete();
-
文件删除事件:
Events::addListener('on_file_delete', function($event)
$f = $event->getFileObject();
$fid = $file->getFileID();
$fpf = PostFile::getByFileID($fid);
$fpf->delete();
$fpmf = ReplyFile::getByFileID($fid);
$fpmf->delete();
);
整个链条都运行良好,例如一切都被删除了,除了帖子本身没有被删除,它必须被删除两次。为什么会这样?
【问题讨论】:
你不需要在 (s.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/…) 之间坚持吗?我认为无需坚持,您只需将其从Unit of Work
中删除即可。
我已将 OneToMany,cascade="persist" 更改为 OneToMany,cascade="remove",现在似乎可以正常工作了
做出回答并接受。对以后的访问者会有帮助(如果正确的话);)。
【参考方案1】:
将 OneToMany,cascade="persist" 更改为 OneToMany,cascade="remove" 似乎已修复它,现在第一次尝试时所有内容都会被删除
【讨论】:
以上是关于教义删除必须进行两次的主要内容,如果未能解决你的问题,请参考以下文章
spring boot webflux中如何根据条件进行两次删除操作?