我有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;
});
什么是最有效的数据库解决方案?谢谢
答案 0 :(得分:0)
也许这可以为您提供帮助,我认为您应该从Thread实体开始。
$('.next-slide', $('.shopteaser-slider').parent())
然后:
//ThreadRepository
public function gethreadsByCategorySortedByPost($slug)
{
$qb = $this->createQueryBuilder('th')
->innerJoin('th.category', 'c', Expr\Join::WITH, 'c.slug = :slug')
->leftJoin('th.post', 'p')
->orderBy('p.createdAt', 'desc');
return $qb->getQuery()->getResult();
}