该问题已提交给开发商,自2014年起,目前尚待解决
https://github.com/Atlantic18/DoctrineExtensions/issues/1125
当您使用
QueryBuilder
创建
DELETE
声明,您绕过
onFlush
$em->remove($entity)
而是手动发出SQL语句。
结果是,softdeletable过滤器不再管理查询的意图,但仍然知道
deleted_at
要解决此问题,必须使用查询提示和
SoftDeleteableWalker
documentation
$query = $this->entityManager->createQueryBuilder()
->delete("AppBundle:ReportRow", "r")
->where("r.date <= :date")
->andWhere("r.balance is null")
->andWhere("r.name = :name")
->setParameters(array("date" => $date->format("Y-m-d"),
"name" => $user->getName()))
->getQuery();
$query->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
\Gedmo\SoftDeleteable\Query\TreeWalker\SoftDeleteableWalker::class);
$output->writeln($query->getSQL());
结果:
UPDATE report_row
SET deleted_at = '2017-10-03 15:06:48'
WHERE (date <= ? AND balance_id IS NULL AND name = ?)