我正在建立一个基本论坛(受 laracasts.com/discuss启发)。当用户发布对主题的回复时:
- 我想用他们的回复锚将他们引导到分页回复列表的末尾(与 Laracasts 的行为相同)。
- 我还想在用户编辑其中一个回复时将其返回到正确的页面。
如何确定新回复将发布在哪个页面 ( ?page=x
) 以及在回复编辑后如何返回正确页面?或者,从主帖子列表中,最新回复在哪个页面上?
这是我当前的ForumPost
模型(减去一些不相关的东西)-
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* Class ForumPost
*
* Forum Posts table
*
* @package App
*/
class ForumPost extends Model {
/**
* Post has many Replies
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function replies()
{
return $this->hasMany('App\ForumReply');
}
/**
* Get the latest reply for a post
* @return null
*/
public function latestReply()
{
return $this->replies()->orderBy('created_at', 'desc')->first();
}
}
更新
看看这个,让我知道你的想法。它的工作方式有点奇怪,但它为给定的回复 ID 返回正确的页面,这只是一种方法:
public function getReplyPage($replyId = null, $paginate = 2)
{
$id = $replyId ? $replyId : $this->latestReply()->id;
$count = $this->replies()->where('id', '<', $id)->count();
$page = 1; // Starting with one page
// Counter - when we reach the number provided in $paginate, we start a new page
$offset = 0;
for ($i = 0; $i < $count; $i++) {
$offset++;
if ($offset == $paginate) {
$page++;
$offset = 0;
}
}
return $page;
}