У меня есть 3 объекта: категория, тема и сообщение.
В категории есть OneToMany с темой, а в теме есть OneToMany с темой.
Я хочу отобразить все темы внутри категории, отсортированные по последнему сообщению.
Тема с самым новым сообщением должна быть сверху.
// CategoryController.php
public function read($slug)
{
$category = $this->getDoctrine()
->getRepository(Category::class)
->findBySlug($slug);
$threads = $category->getThreads();
}
// CategoryRepository.php
public function findBySlug($slug): ?Category
{
return $this->createQueryBuilder('c')
->andWhere('c.slug = :val')
->setParameter('val', $slug)
->getQuery()
->getOneOrNullResult();
}
Я безуспешно пытался добиться этого с innerJoin
и orderBy
.
Это также не работает:
$iterator = $threads->getIterator();
$iterator->uasort(function ($a, $b) {
return ($a->getPosts()->getValues()->getCreatedAt() > $b->getPosts()->getValues()->getCreatedAt()) ? -1 : 1;
});
Что было бы наиболее эффективным решением для базы данных? Спасибо