Symfony2 SoftDeleteable无法使用QueryBuilder删除

HMa*_*gdy 4 php soft-delete symfony doctrine-orm

通过实体管理器,软删除行为在执行删除语句中正常工作,如下代码:

$entity = $this->em->getRepository('Users')->find(7);
$this->em->remove($entity);
$this->em->flush();
Run Code Online (Sandbox Code Playgroud)

但是当通过QueryBuilder执行相同的功能时,硬删除将在数据库上执行

$qb = $this->em->createQueryBuilder();
$qb->delete('Users', 'p');
$qb->where($qb->expr()->eq('p.id', ':id'));
$qb->setParameters(array("id" => 7));
$result = $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)

如何通过实体管理器或查询构建器在所有情况下允许软删除

Ken*_*nel 11

如果您使用DQL,则必须使用查询提示.这应该做的伎俩:

$query = $qb->getQuery()

$query->setHint(
    \Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
    'Gedmo\SoftDeleteable\Query\TreeWalker\SoftDeleteableWalker'
);

$result = $query->getResult();
Run Code Online (Sandbox Code Playgroud)

更新:

文档提到您必须使用查询提示但不提供示例,因此我从测试中提取了用法.

文档:https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md

测试用法:https://github.com/l3pp4rd/DoctrineExtensions/blob/master/tests/Gedmo/SoftDeleteable/SoftDeleteableEntityTest.php