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,它比我提供的信息更多。
我正在使用 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,它比我提供的信息更多。