symfony 访问Gedmo软删除实体

c3frrgcw  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(97)

在User实体类的注解中,我有:

@Gedmo\SoftDeleteable(fieldName="deletedAt", hardDelete=false)

稍后在代码中:

/**
 * @var \DateTime
 * @ORM\Column(type="datetime", nullable=true)
 */
protected $deletedAt;

软删除工作正常,但我想修改,使软删除的用户仍然可以访问,例如与$message->getSentBy()。因为用户的外键是在另一个表。
在类Message中,我有字段:

/**
 * @ORM\ManyToOne(targetEntity="User")
 * @ORM\JoinColumn(name="locked_by", referencedColumnName="id")
 */
private $sentBy;

现在由于软删除,无论常规活动用户希望看到软删除用户发送的消息**我得到一个错误无效的用户(用户实体未找到)。
有没有什么方法可以修改软删除,使它在其他外键使用该字段的地方是可选择的?或者可以在select语句中使用。
我在PHP 7.4上使用Symfony 5.4

wooyq4lh

wooyq4lh1#

当您需要访问“已删除”的实体时,只需禁用过滤器:

$em->getFilters()->disable('soft-deleteable');
$art = $repo->findOneBy(array('title' => 'My Article'));

// or
// Enable / Disable filter filter, for specified entity (default is enabled for all)
$filter = $em->getFilters()->enable('soft-deleteable');
$filter->disableForEntity('Entity\Article');
$filter->enableForEntity('Entity\Article');

请参阅https://github.com/doctrine-extensions/DoctrineExtensions/blob/main/doc/softdeleteable.md#usage

相关问题