【发布时间】:2016-05-10 19:06:00
【问题描述】:
我有一个论坛系统,其中包含许多类别,其中包含许多帖子。
因此,对于给定的论坛,我应该能够找出特定论坛的最后一篇帖子。一个论坛可以有许多子论坛(又名子论坛)。我只能完成其中的一部分。
表格演示:
| id | parent_id | name | is_category |
|----|-----------|-------------------|-------------|
| 1 | 0 | Suggestions | 1 |
| 2 | 1 | site suggestions | 0 |
| 3 | 1 | forum suggestions | 0 |
| 4 | 2 | bugs | 0 |
这是我的代码:
public function lastPost()
{
foreach ($this->threads()->orderBy('updated_at')->get() as $thread) {
$post = $thread->lastPost();
}
if ($this->hasSubforum()) {
foreach ($this->subforums as $subforum) {
$post = $subforum->lastPost();
}
}
return $post;
}
如您所见,lastPost() 被调用,直到论坛没有更多子论坛。我正在从一个子论坛的最新线程中获得最后一篇文章。到目前为止,一切都很好。但是,最后一个帖子将是子论坛所在的顺序。因此,如果最后一个帖子在倒数第二个子论坛中,则返回最后一个子论坛的最后一个帖子,因为最后一个论坛在递归中最后返回。
我该如何解决这个问题?
谢谢!
【问题讨论】:
-
检查日期并仅在日期较新的情况下设置
$post(或者甚至帖子的id- 假设有一个 - 假设它是连续的)? -
您可能可以在 $this->threads()...etc 集合中使用最后一种方法,对吧? laravel.com/docs/5.1/collections#method-last