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