2

我正在尝试为现有数据库设置一个简单的论坛查看器。主要作为学习 Symfony2 的练习。

与大多数论坛一样,它有一些相互关联的东西。主要是在这样的链中:

Forum -> Thread -> Comment -> Author

我使用注释创建了一个模式,该模式描述了论坛 > 线程之间以及线程 > 评论之间的OneToMany关系。作者是OneToOne,带有 Thread 和 Comment。

我的问题是我想在我的论坛中显示一个主题列表,该列表按每个主题中最新评论的时间戳排序(这在论坛上很正常)。更复杂的是,我还需要确保粘性或固定线程位于列表顶部。

我一直在尝试将代码放在不同的地方,但我不确定它的最佳实践位置。我在我的 ForumRepository 中尝试了 DQL 解决方案

public function findWithOrderedComments($forum_id)
{
    $forum = $this->getEntityManager()
        ->createQuery('SELECT f,
           (SELECT c.time
                FROM xxForumArchiveBundle:Comment c
                WHERE c.post = p.id
                ORDER BY c.time DESC) AS time
            FROM xxForumArchiveBundle:Forum f 
            JOIN f.posts p
            WHERE f.id = :forum_id
            ORDER BY time')
        ->setParameter('forum_id', $forum_id)
        ->getSingleResult();

    return $forum[0];
}

但这(除了将我的查询响应转换为数组之外)什么也没做。我玩弄了在模型中放置一些排序逻辑以返回排序的评论集合,但我 a) 不确定这是否是正确的位置,并且 b) 没有解决我在论坛页面上的排序顺序。我也想过在树枝模板中这样做,但这对我来说似乎是错误的。我也可以在控制器中执行此操作,但鉴于 Doctrine 已经加载了数据(?)我相当肯定那是一种浪费。

在我的树枝模板中,我基本上是在做{% for post in forum.posts %}.

我该怎么做?

4

0 回答 0