我经常按外来属性对关联实体进行排序,我想知道如何最好地处理它并仍然能够使用主要实体的集合。我们有这个例子:
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
来解决此问题。
我想听听你们人们如何处理这个问题。我打赌我并不孤单: - )