Symfony -删除和Stof Softdeleteable

8gsdolmq  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(133)

我有一个实体,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个实体管理器忽略软删除,并删除它无论如何。
是否可以同时使用孤儿删除和软删除?

mlmc2os5

mlmc2os51#

当软可删除过滤器被禁用时,并不意味着监听器被禁用。
考虑扩展基本侦听器类:

/**
 * @noinspection PhpDocFinalChecksInspection
 * @psalm-suppress InvalidExtendClass
 * @phpstan-ignore-next-line (no other solution than to extend from SoftDeleteableListener)
 */
final class ConditionalSoftDeleteableListener extends SoftDeleteableListener
{
    /** @psalm-suppress MethodSignatureMismatch */
    public function onFlush(EventArgs $args): void
    {
        /** @var OnFlushEventArgs $args */
        $filters = $args->getObjectManager()->getFilters();

        if (!$filters->isEnabled('softdeleteable')) {
            return;
        }

        parent::onFlush($args);
    }
}

字符串
然后,在硬删除逻辑之前调用$entityManager->getFilters()->disable('softdeleteable');

62lalag4

62lalag42#

这是软删除组件的预期行为。首次尝试删除时,它会将其标记为软删除。如果软删除项目被标记为删除,则会永久删除。
您正在提交一个缺少项目的表单,因为它们被Doctrine过滤器过滤(软删除),因此当表单提交时,项目丢失并再次被标记为删除。
检查:https://github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/lib/Gedmo/SoftDeleteable/SoftDeleteableListener.php#L67

相关问题