我有一个实体,User
和用户可以有许多电话号码,所以我有字段:User.numbers
和实体Number
UserType:
->add('numbers', CollectionType::class, array(
'entry_type' => NumberType::class,
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
))
字符串
字段号码也使用@Gedmo\SoftDeleteable
。它的工作OK -当我删除电话号码直接它的OK,电话号码不会被删除,只标记为删除。
但如果我更新用户,我有5个数字,我删除一个,并发送表单只有4个实体管理器忽略软删除,并删除它无论如何。
是否可以同时使用孤儿删除和软删除?
2条答案
按热度按时间mlmc2os51#
当软可删除过滤器被禁用时,并不意味着监听器被禁用。
考虑扩展基本侦听器类:
字符串
然后,在硬删除逻辑之前调用
$entityManager->getFilters()->disable('softdeleteable');
。62lalag42#
这是软删除组件的预期行为。首次尝试删除时,它会将其标记为软删除。如果软删除项目被标记为删除,则会永久删除。
您正在提交一个缺少项目的表单,因为它们被Doctrine过滤器过滤(软删除),因此当表单提交时,项目丢失并再次被标记为删除。
检查:https://github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/lib/Gedmo/SoftDeleteable/SoftDeleteableListener.php#L67