禁用硬删除记录的软可删除过滤器不起作用

禁用硬删除记录的软可删除过滤器不起作用

本文介绍了禁用硬删除记录的软可删除过滤器不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在功能测试期间禁用软可删除"过滤器,我按如下方式执行:

I'm trying to disable "Soft Deleteable" filter during functional testing and I do it as follow:

第一个选项:在我的测试中尝试在 tearDown() 处禁用:

First option: tried to disable at tearDown() in my test:

protected function tearDown() {
    parent::tearDown();

    $entityUser = $this->em->getRepository("UserSecurityBundle:User")->find($this->user->getUser()->getId());

    $filter = $this->em->getFilters()->disable('softdeleteable');

    $this->em->remove($entityUser);
    $this->em->flush();
    $this->em->close();
}

没用.

第二个选项:制作一个doctrine_test.yml 并在config_test.yml 中导入:

Second option: make a doctrine_test.yml and import in config_test.yml:

imports:
    - { resource: config.yml }
    - { resource: doctrine_test.yml }
    - { resource: security_test.yml }

在这种情况下,我删除了 doctrine.yml 并包含在 config_prod.yml 中.

In this case I remove the doctrine.yml and include in config_prod.yml.

没用.

这是我的 doctrine_test.yml 部分的样子:

This is how my doctrine_test.yml section look like:

filters:
    softdeleteable:
        class: GedmoSoftDeleteableFilterSoftDeleteableFilter
        enabled: false

第三个选项:在setUp()中禁用过滤器:

Third option: disable the filter in setUp():

public function setUp() {
    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $this->em = static::$kernel->getContainer()->get('doctrine')->getManager();

    $fixture = new LoadFeeData();
    $fixture->load($this->em);

    $this->em->getFilters()->disable('softdeleteable');
    $this->user = $this->createUser();

    parent::setUp();
}

没用.

有什么建议吗?解决方案?

Any advice? Solution?

推荐答案

所以经过一番研究,在做了更多的测试后我找到了解决方案,见下文:

So after some research, after doing more test I found the solution, see below:

protected function tearDown() {
    parent::tearDown();

    $entityAccount = $this->em->getRepository("UserSecurityBundle:Account")->find(array("id" => $this->user->getId(), "user" => $this->user->getUser()->getId()));
    $entityUser = $entityAccount->getUser();

    $entityCompanyHasWtax = $this->em->getRepository("ApprovalBundle:CompanyHasWtax")->findOneBy(array("company" => $this->company, "wtax" => $this->fee, "user" => $this->user->getUser()->getId()));

    foreach ($this->em->getEventManager()->getListeners() as $eventName => $listeners) {
        foreach ($listeners as $listener) {
            if ($listener instanceof GedmoSoftDeleteableSoftDeleteableListener) {
                $this->em->getEventManager()->removeEventListener($eventName, $listener);
            }
        }
    }

    $this->em->remove($entityCompanyHasWtax);
    $this->em->remove($entityAccount);
    $this->em->remove($entityUser);

    $this->em->flush();
    $this->em->close();
}

显然 Doctrine 有一个错误,因为以这种方式禁用过滤器:

Aparently Doctrine has a bug since disabling the filter in this way:

$this->em->getFilters()->disable('softdeleteable');

不行,给别人好看

这篇关于禁用硬删除记录的软可删除过滤器不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 21:47