Nat*_*man 7 doctrine soft-delete symfony
我正在构建一个Symfony2项目并使用gedmo/doctrine-extensions(GitHub)来实现软删除.我的问题是,是否有一种方法可以"禁用"或"覆盖"软删除,甚至可以检测某些内容是否被软删除.
情况如下:
我有一个引用"用户"实体的"note"实体.特定注释引用已被软删除的用户.即使用户已被删除,它也会为TWIG的"已定义"逻辑返回true,甚至可以返回已删除用户的id.但是,如果我查询任何其他信息(包括标记是否已删除的"deletedAt"参数),我会收到500"未找到实体"错误.
由于数据实际上仍然存在,并且由于注释本身尚未删除,我仍然想说明谁写了注释,即使用户已被删除.
那可能吗?如果没有,我如何正确检测某些内容是否被软删除?就像我说的那样,$note->getUser()仍然会检索一个对象,并为任何null /"已定义"的比较返回true.
trr*_*rrm 14
你可以这样做:
$filter = $em->getFilters()->enable('soft-deleteable');
$filter->disableForEntity('Entity\User');
$filter->enableForEntity('Entity\Note');
Run Code Online (Sandbox Code Playgroud)
您需要设置关系加载eager,这将防止延迟加载对象只有一个id没有别的.
您可以在此处找到有关预先加载的更多信息及其注释:
至于我的代码,这就是定义到Usernow 的链接时的样子:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="answers", fetch="EAGER")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,User实体可以有多个answers.User从answer透视图加载a时,这将起作用:
foreach($answers as $answer) {
$user = $answer->getUser();
if (!$user) {
continue;
}
}
Run Code Online (Sandbox Code Playgroud)