我有一个@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属性)。

10-01 08:35