按PersistentCollection内部的属性对PersistentCollection进行排序

时间:2019-01-09 16:44:23

标签: symfony doctrine

我有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();
}

我尝试使用innerJoinorderBy来实现此目标未成功。 这也不起作用:

$iterator = $threads->getIterator();

$iterator->uasort(function ($a, $b) {
        return ($a->getPosts()->getValues()->getCreatedAt() > $b->getPosts()->getValues()->getCreatedAt()) ? -1 : 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();
}
相关问题