Php Symfony获取未标记为已删除的嵌套实体

Php Symfony获取未标记为已删除的嵌套实体,php,symfony,doctrine,entity,Php,Symfony,Doctrine,Entity,我正在编写我的第一个symfony项目,我遇到了一个问题: 我有一个我称之为“负载”的实体,它是指调用“事务”的其他实体(x个事务属于1个负载): 事务可以标记为已删除,但它们会保存在数据库中。 我创建了一个自定义存储库和一些方法,它们向我提供未删除的事务 但是,如果我想获取包含所有事务的负载,我会调用 $load = $loadRepository->find($id); 它做它应该做的事。它从数据库中获取引用给定负载的所有事务 但我不想在结果中包含已删除的事务。我怎样才能做到这一点

我正在编写我的第一个symfony项目,我遇到了一个问题: 我有一个我称之为“负载”的实体,它是指调用“事务”的其他实体(x个事务属于1个负载):

事务可以标记为已删除,但它们会保存在数据库中。 我创建了一个自定义存储库和一些方法,它们向我提供未删除的事务

但是,如果我想获取包含所有事务的负载,我会调用

 $load = $loadRepository->find($id);
它做它应该做的事。它从数据库中获取引用给定负载的所有事务

但我不想在结果中包含已删除的事务。我怎样才能做到这一点?我完全没有办法。当然,我可以迭代事务并删除删除的事务,但我认为有更好的解决方案

我试图为事务注册一个存储库(这样做有效),并覆盖find方法(这样做无效)。 是否有另一个内部调用的方法,我必须重写


提前谢谢你

如果我正确理解了您的问题,这种行为已经存在于条令扩展SoftDeletable中,您可以找到文档

您只需在
事务
实体上添加类似
deleteAt
属性的内容,那么此字段中包含数据的所有实体都将被自动过滤,就像它们确实被删除一样。如果要查找所有事务实体,可以始终禁用查询中的筛选器。

我找到了一个解决方案:

#config.yml:

doctrine:
    orm:
         filters:
            deletedFilter:
                class: AppBundle\Filter\SoftDeletedFilter
                enabled: true
_

现在,如果删除的值不是0,则实现(空)接口“SoftDeleteableInterface”的所有实体将不包括在内


非常感谢您的回答/评论

您是否尝试创建自定义存储库方法?类似于
findundelected
?放弃我之前的评论:您是否尝试过条令过滤集合的功能?看:看起来这可能是解决办法。我会努力的!谢谢谢谢但我找到了一个不用扩展的解决方案
#config.yml:

doctrine:
    orm:
         filters:
            deletedFilter:
                class: AppBundle\Filter\SoftDeletedFilter
                enabled: true
namespace AppBundle\Filter;
use Doctrine\ORM\Mapping\ClassMetaData,
Doctrine\ORM\Query\Filter\SQLFilter;

class SoftDeletedFilter extends SQLFilter
{
    public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
    {

        if(!is_subclass_of($targetEntity->rootEntityName, "AppBundle\Entity\SoftDeleteableInterface")){
            return "";
        }
        return $targetTableAlias.'.deleted = 0'; 
    }
}