是否可以区分在 Doctrine 关系中填充的行?
例如:我有一个一对多的关系,其中目标实体有一deleted
列。我希望将此列设置为的任何行都true
不会出现在集合中。
我在文档中找不到类似的东西,所以这甚至是不可能的。
是否可以区分在 Doctrine 关系中填充的行?
例如:我有一个一对多的关系,其中目标实体有一deleted
列。我希望将此列设置为的任何行都true
不会出现在集合中。
我在文档中找不到类似的东西,所以这甚至是不可能的。
不,您不能在水合期间区分行。
您可以做的是使用SQL 过滤器来过滤来自数据库的任何数据,或者使用标准 API(此处示例)过滤您的 getter 中的集合,该 API 从Doctrine 2.3开始可用:
public function getUsers()
{
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->andWhere($criteria->expr()->eq('deleted', false));
return $this->users->matching($criteria);
}
还有一个使用过滤器的“softdelete”扩展。在我看来,这是一个更清洁的解决方案,您不必在每个 getter 中重复该任务。您可以默认激活过滤器,在需要删除记录的极少数情况下,您可以停用过滤器。我认为它也会更高效: https ://github.com/l3pp4rd/DoctrineExtensions