在Doctrine 2关联中自定义排序/过滤

时间:2014-12-01 21:17:59

标签: php doctrine-orm associations dql

我经常按外来属性对关联实体进行排序,我想知道如何最好地处理它并仍然能够使用主要实体的集合。我们有这个例子:

Author { $name, Comment[] $comments}
Comment { $name, Category $category}
Category { $name, $position }

我希望$author->getComments()按评论的类别排名排序。就DQL而言:

SELECT com.* FROM comment com JOIN com.category cat ORDER BY cat.position

说实话,我的分类标准相当复杂,这只是为了让我们开始。

我知道* ToMany关联的@OrderBy注释,但它不会帮助我,因为不支持按联接表的属性排序。

我也知道我可以使用DQL来获取评论,但我需要在很多地方访问它们,我更喜欢引用$author->getComments()而不是调用$commentRepository->findByAuthorSorted($author)。我不想记得调用我的自定义方法以正确的方式获取注释。我希望它是自动的。

我正在考虑以某种方式将commentRepository传递给Author实体并在getComments()中使用它,但我不知道该怎么做,而且开始时感觉不对。

我还想过在getComments()中用PHP进行排序。我认为我不能使用Criteria + $author->comments->matching(),因为似乎不支持加入的属性。将这个集合转换为只读数组我很好,但我希望有更好的,更多的Doctrine方式解决方案。

我不想通过向$categoryPosition添加Comment来解决此问题。

我想听听你们人们如何处理这个问题。我打赌我并不孤单: - )

0 个答案:

没有答案