gpt4 book ai didi

doctrine-orm - 如何在 symfony 中禁用学说的软删除(Soft-deleteable)过滤器

转载 作者:行者123 更新时间:2023-12-04 01:31:43 30 4
gpt4 key购买 nike

为 Doctrine 2 安装和使用 SoftDeleteable 行为扩展非常简单。问题通常是尝试为某些代码部分禁用它并再次启用。您可能希望这样做:

  • 加载软删除的实体
  • 完全绕过软删除过滤器从数据库中删除实体

  • 那么如何禁用呢?

    最佳答案

    1. 如何加载软删除的实体
    根据文档,禁用实体管理器的过滤器:

    $em->getFilters()->disable('softdeleteable');
    $object = $em->find('AppBundle:Object', 1); // soft-deleted entity will be loaded
    再次启用软删除:
    $em->getFilters()->enable('softdeleteable');
    注: $em->clear();如果实体已经加载了禁用的软删除过滤器,则在此行之前可能需要。
    2.如何从数据库中完全删除实体
    即使文档中没有提到它,如果您需要删除实体并绕过软删除过滤器,第一个解决方案也不起作用。过滤器需要从实体管理器的事件监听器中移除:
    // initiate an array for the removed listeners
    $originalEventListeners = [];

    // cycle through all registered event listeners
    foreach ($em->getEventManager()->getListeners() as $eventName => $listeners) {
    foreach ($listeners as $listener) {
    if ($listener instanceof \Gedmo\SoftDeleteable\SoftDeleteableListener) {

    // store the event listener, that gets removed
    $originalEventListeners[$eventName] = $listener;

    // remove the SoftDeletableSubscriber event listener
    $em->getEventManager()->removeEventListener($eventName, $listener);
    }
    }
    }

    // remove the entity
    $em->remove($object);
    $em->flush($object); // or $em->flush();

    // re-add the removed listener back to the event-manager
    foreach ($originalEventListeners as $eventName => $listener) {
    $em->getEventManager()->addEventListener($eventName, $listener);
    }
    引用:
  • https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/softdeleteable.md
  • Force delete doctrine entity when using SoftDeletable by KnpLabs
  • Disable Soft Deleteable filter for hard delete record doesn't work
  • 关于doctrine-orm - 如何在 symfony 中禁用学说的软删除(Soft-deleteable)过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198357/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com