Laravel分页器获取项目页面

6
我正在实现一个论坛系统。该应用程序将有一个关注系统,每个用户都能看到他们朋友的活动。所以,当我的朋友在论坛上发帖时,我应该在我的动态中看到一条消息:“你的朋友回复了论坛...”。
到此为止一切都很好,但我想实现以下功能:
我的动态还应该有一个链接指向那个论坛,可以带我到我的朋友回复的页面。这个页面不总是最后一页。
因此,我的问题是:如果我知道我的朋友回复的$reply->id,并且我正在分页显示所有帖子,我怎样才能知道我的朋友的回复在哪一页?这很容易吗?或者我要求太多了吗?

你有没有找到解决办法?我现在也面临着L5的同样困境。 - Winter
3
我刚刚问了同样的问题-起初没有注意到已经有几个人问过了。Laracasts.com/discuss上的论坛具备这种功能,但其创建者未回复我任何关于如何实现它的详细信息(可能只是太忙了)。这是我的问题和一些解决方案- https://dev59.com/a4jca4cB1Zd3GeqP3ehn - NightMICU
也许你比我更有运气,@jeffrey_way在Twitter上使用自定义构建的laracasts.com论坛具备了这种功能。我真的希望在Laravel中有一种明显的方法来实现这一点,因为它非常重要。 - NightMICU
谢谢!我没意识到这个主题还有另一个问题。我阅读了答案,我想现在我会采取那种方法。 - Javier Enríquez
1个回答

1
这取决于你用来排序回复的方式。这个例子假设用户选择了“最新”,并且我们使用created_at来确定发布时间。
在动态中,展示回复所在的页面。
$reply->getLink()

在“回复”模型中:

Reply

public function getLink($per_page = 10)
{
    //assumes ordered by newest
    $newer = $this->forum()->replies()->orderBy('created_at','desc')->where('created_at','>',$this->created_at)->count();
    $page = ceil($newer/$per_page);
   return url(sprintf('forums/%s/replies/%s?per_page=%s&page=%s',$this->forum_id,$this->id, $per_page,$page);
}

如果总帖子数是30,而您想要的是第18个,则链接将是:
    $newer = 30-18 = 12
    $page = ceil(12/10) = 2

/forums/{id}/replies/{id}?per_page=10&page=2
我能看出这种方法的一个缺陷是如果在同一秒内发布的帖子数大于每页显示的回复数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接