在学说中过滤@OneToMany



我有一个@OneToMany关系:

/**
 * @OneToMany(targetEntity="MyAppEntitiesContent", mappedBy="clist")
 * @OrderBy({"contentOrder"="ASC", "id"="ASC"})
 */
private $contents;

我得到了所有Contentclist属性是当前实例的 id。但是Content类也具有isDeleted属性。如果设置为 true,我想将其从列表中排除。

怎么可能?我可以在getContents()函数中过滤列表,但我希望有更好的解决方案。也许以某种方式在@OneToMany关系的定义中

选项 1

我建议使用条件来过滤集合

use DoctrineCommonCollectionsCriteria;
$clist = $entityManager->find('Clist', $clistId);
$contentCollection = $clist->getContents();
$criteria = Criteria::create()
   ->where(Criteria::expr()->eq("isDeleted", false))
;
$undeletedContents = $contentCollection->matching($criteria);

选项 2

另一种选择是使用筛选器,您可以在其中确保只要筛选器处于活动状态,每个查询都会确保附加"where"约束。

如果您有一些属性,而这些属性在大多数实体中大部分时间都被查询(例如 ClientId 或已删除属性(,这通常是有意义的。

如果您使用 ArrayCollection 来存储您的关系,那么您可以这样做:

$criteria = Criteria::create()->where(Criteria::expr()->eq("isDeleted", false));
$contents = $yourMainClass->getContents()->matching($criteria);

希望这有帮助,

亚历山德鲁·科索伊

相关内容

  • 没有找到相关文章

最新更新