Laravel新线程出现在碰撞线程之前

时间:2016-09-25 18:13:43

标签: php mysql laravel

我有一个论坛帖子表,链接到评论表

我想通过他们的最新评论来命令我的查询,并在该

之前出现一个新的主题

目前,新线程最后出现

理想情况下,我需要新的线程,没有任何评论出现在它们之上,而不是在带有注释的帖子之后命令?如果这是有道理的

这张图应该解释

enter image description here

订单应该是:

  • 第五个主题(因为最后创建)
  • 第三个主题(应该是第二个,因为它在第五个主题之前有一个注释)
  • FourthThread
  • 第二线程
  • First Thread

这是我的查询

public function getThreads($limit = 30)
{
    return ForumThread::select(DB::raw('forum_threads.*, count(*) as count'))
        ->where('cat_id', $this->id)
        ->where('published', 1)
        ->join('comments', 'comments.thread_id', '=', 'forum_threads.id', 'left outer')
        ->orderBy('pinned', '1')
        ->orderBy('count', 'desc')
        ->orderBy('comments.created_at', 'desc')
        ->groupBy('forum_threads.id')
        ->paginate($limit);
}

试图解释我能做的最好的事情

1 个答案:

答案 0 :(得分:0)

您必须创建一个条件列,其值为更新,线程创建日期或最新评论创建日期。

这样的事情:

IF(forum_threads.created_at > comments.created_at, forum_threads.created_at, comments.created_at) as last_activity_at

最好是将一个帖子的第一个帖子作为附加到Comment的{​​{1}}。所以每个帖子至少会有一条评论。只需从评论计数中减去一个即可计算“回复”的数量。这将使您的数据库结构更清晰,并且不会在线程和注释表中复制列。