Выборочная сортировка / фильтрация в Doctrine 2 ассоциации

Я часто сортирую связанные сущности по внешнему атрибуту, и мне интересно, как лучше всего справиться с этим и при этом иметь возможность использовать коллекции основной сущности. Давайте иметь этот пример:

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

По правде говоря, мои критерии сортировки довольно сложны, это только начало.

Я знаю об аннотации @OrderBy для ассоциаций * ToMany, но она мне не поможет, поскольку упорядочение по атрибуту объединенной таблицы не поддерживается.

Я также знаю, что могу использовать DQL для получения комментариев, но мне нужно получить к ним доступ во многих местах, и я бы предпочел ссылки $author->getComments() вместо того, чтобы звонить $commentRepository->findByAuthorSorted($author), Я не хочу, чтобы мне пришлось вызывать мой пользовательский метод для правильного выбора комментариев. Я хочу, чтобы это было автоматически.

Я думал о том, чтобы как-то передать commentRepository объекту Author и использовать его в getComments() но я не понял, как это сделать, к тому же с самого начала это нехорошо.

Я также думал о выполнении сортировки в PHP в getComments(), Я не думаю, что я могу использовать Criteria + $author->comments->matching() потому что объединенные атрибуты не поддерживаются. Я в порядке с преобразованием коллекции в массив только для чтения, но я надеюсь, что есть лучшее, более подходящее для Doctrine решение.

Я не хочу обходить проблему, добавляя $categoryPosition для каждого Comment,

Я хотел бы услышать, как вы, люди, решаете эту проблему. Бьюсь об заклад, я не одинок 🙂

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …