作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试检测 onFlush
中多对多关系的变化事件。
如果将新实体添加到关系或更新关系(始终保留一个元素),我可以使用 $unitOfWork->getScheduledCollectionUpdates()
检测更改然后检查 getInsertDiff()
或 getDeleteDiff()
.到现在为止还挺好。
当我从关系中取出所有实体时,问题就来了:“以前有两个相关实体,但现在有 没有 相关实体。”
当关系为空时,我可以访问 $unitOfWork->getScheduledCollectionDeletions()
,但无法知道删除了哪些实体:
getDeleteDiff()
对于这个集合并没有说明什么。 getSnapshot()
没有告诉我之前有哪些实体 $uow->getScheduledCollectionDeletions()
之外,一切正常(可能需要一些优化) (第 101 行)
最佳答案
原因这个问题是双重的:
1)当方法clear()
在 Doctrine\ORM\PersistentCollection
上调用, 它会:
scheduleCollectionDeletion()
在 Doctrine\ORM\UnitOfWork
. $uow->getScheduledCollectionDeletions()
中的原因(而不是在
$uow->getScheduledCollectionUpdates()
中)。第 3 点是您无法确定集合中的内容在清除之前的原因。
ChoiceType
或
CollectionType
类型与选项结合使用
multiple
,那
clear()
当所有实体都应该从集合中删除时,方法将被调用。
MergeDoctrineCollectionListener
在此处添加:
symfony/symfony
并实现一个选项,以便不添加
MergeDoctrineCollectionListener
.也许像
no_clear
以防止添加监听器。这不会引入 BC 中断并且可以解决您的问题,因为
clear()
当应删除所有实体时,不会调用集合的方法。
OnLoad
事件,它可以计算从数据库中获取时集合中实体的数量。那样你的
OnFlush
监听器可以使用该数字来了解在清除集合时从集合中删除了多少实体。
关于symfony - 在 Doctrine 2(和 Symfony)中正确使用 $unitOfWork->getScheduledCollectionDeletions() 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311083/
我正在尝试检测 onFlush 中多对多关系的变化事件。 如果将新实体添加到关系或更新关系(始终保留一个元素),我可以使用 $unitOfWork->getScheduledCollectionUpd
我是一名优秀的程序员,十分优秀!