我正在尝试为现有数据库设置一个简单的论坛查看器。主要作为学习 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 %}
.
我该怎么做?