Laravel: 生成 URL 到分页项目

Laravel: Generate URL to paginated item

我正在使用 Laravel 5 建立一个论坛。每个论坛都有话题,每个话题都有回复。我找不到任何关于如何获取线程的最新回复的 URL - 现在我有这个功能来显示论坛:

public function show($slug)
{
    $forum = $this->forums->getBySlug($slug);
    return view('forum.show', compact('forum'));
}

然后在该视图中,我有一个基本的 @forelse 来显示 HasMany 相关线程:

@forelse($forum->threads as $thread)
    <tr>
        <td><a href="{{ route('forum.thread', [$forum->slug, $thread->slug]) }}">{{ $thread->title }}</a></td>
        <td>{{ $thread->replies->count() }} Replies</td>
        <td>{{ $thread->replies->last()->author->username or 'No recent activity' }}</td>
    </tr>
@empty
    <tr>
        <td colspan="3" class="text-center">There aren't any threads in this forum</td>
    </tr>
@endforelse

这很好用,但我希望将最近回复的用户名链接到带有 url 的实际回复,例如 http://example.com/forum/thread-title-here/?page=3#12345,其中片段是回复 ID。我想不通,有什么想法吗?当使用 $thread->replies->paginate(10) 尝试计算线程的页数时,我也收到错误 Call to undefined method Illuminate\Database\Eloquent\Collection::paginate(),但这引发了另一个关于链接到其他页面的帖子的问题。

有没有人有什么想法?

您没有提供足够的代码来给出详细的响应,但是为了举例并假设您使用 Laravel 的命名约定:

// Eager load threads and their replies
$forum = Forum::with(array('threads.replies' => function($q) {
    // For each thread, get the most recent reply
    $q->orderBy('some_date_column', 'desc')->take(1);
}))->get();

从您提供的代码来看,您似乎需要修改 getBySlug() 方法。

刚刚 运行 陷入类似的问题。试试这个:

threads.model

// probably what you have now
public function replies() { return hasMany('Reply');}

您可以像这样向回复模型添加第二个关系:

// add this relation which has a filter
public function latestReply() { return hasOne('Reply')->last();}

现在当你想要最新的回复时,你可以这样做:

$forum = $this->forums->getBySlug($slug)->with('threads','threads.latestReply');

在您看来: @foreach($forum->threads as $thread) {{$thread->latestReply->id}} @endforeach

这是我从http://softonsofa.com/tweaking-eloquent-relations-how-to-get-latest-related-model/

那里学到的

The original link no longer works. Click here to visit the Google cached version

希望我已经运行根据您的情况确定了这一点。您可能想查看 link,它比我提供的信息更多。