我有一个@OneToMany
关系:
/**
* @OneToMany(targetEntity="\MyApp\Entities\Content", mappedBy="clist")
* @OrderBy({"contentOrder"="ASC", "id"="ASC"})
*/
private $contents;
我得到所有的
Content
,其中clist
属性是当前实例的id。但是Content
类也有一个isDeleted
属性。如果设置为true,我想将其从列表中排除。怎么可能?
我可以在
getContents()
函数中筛选列表,但是我希望有更好的解决方案。也许是某种意义上的@OneToMany
关系 最佳答案
选项1
我建议使用Criteria筛选集合
use Doctrine\Common\Collections\Criteria;
$clist = $entityManager->find('Clist', $clistId);
$contentCollection = $clist->getContents();
$criteria = Criteria::create()
->where(Criteria::expr()->eq("isDeleted", false))
;
$undeletedContents = $contentCollection->matching($criteria);
选项2
另一个选项可以是使用Filters,在这里你可以确保只要过滤器是活动的,每一个查询都确保了“WHE”约束被附加。
这通常是有意义的,如果你有一些属性,在大多数情况下,你的实体被查询(例如,一个clientid或一个deleted属性)。