我使用 rtconner/laravel-tagging 在 Laravel 8 中按标签获取时做错了
I did something wrong with fetching by tag in Laravel 8, using rtconner/laravel-tagging
我尝试通过标签获取帖子。标签有 slug,标签 link 应该指向 url 中带有标签 slug 的页面。但我无法在该页面上显示带有相关标签的帖子。
Post控制器。方法 'index' 效果很好,显示所有带有相关标签的帖子。在 'fetch' 方法中,我试图获取在函数 'withAnyTag' 中使用它的 slug,如文档中所写 — https://github.com/rtconner/laravel-tagging/
public function index()
{
$posts = Post::orderBy('created_at', 'desc')->paginate(5);
return view('backend.post.index', compact('posts'));
}
public function fetch(Tag $tag)
{
$slug = $tag->slug;
$posts = Post::withAnyTag([$slug])->get()->paginate(5);
return view('backend.post.index', compact('posts'));
}
在 Post 模型中没有什么特别的,只是 trait Taggable。
路线。我觉得没问题,带上以防万一
Route::get('post', [PostController::class, 'index'])->name('posts');
Route::get('post/tag/{tag:slug}', [PostController::class, 'fetch'])->name('posts.fetch');
来自视图 'backend.post.index' 的片段,用于两种方法。链接运作良好,并在右侧领先 url。
@foreach($posts as $post)
<tr>
<td>{!! $post->title !!}</td>
<td>{!! $post->content !!}</td>
<td>
@foreach($post->tags as $tag)
<a href="{{ route('posts.fetch', $tag->slug) }}">{!! $tag->name !!}</a>
@endforeach
</td>
<td>
<a href="/" class="btn btn-sm btn-outline-primary py-0">Read Post</a>
<a href="{{ route('post.edit', $post->slug) }}" class="btn btn-sm btn-outline-success py-0">Edit Post</a>
<form action="{{route('post.destroy', $post->slug)}}" method="POST">
@method('DELETE')
@csrf
<button type="submit" class="btn btn-sm btn-outline-danger py-0">Delete</button>
</form>
</td>
</tr>
@endforeach
{!! $posts->links() !!}
但是,当我点击标签并进入“.../post/tag/tag-slug”页面时,出现错误 'Method Illuminate\Database\Eloquent\Collection::paginate does not exist.' 在方法 'index' 中没有分页错误。
我认为你应该 运行 paginate
直接在 withAnyTag
方法上这样
$posts = Post::withAnyTag([$slug])->paginate(5);
您不需要单独调用 get()
,因为 paginate
将 运行 查询和 return 分页结果。
我尝试通过标签获取帖子。标签有 slug,标签 link 应该指向 url 中带有标签 slug 的页面。但我无法在该页面上显示带有相关标签的帖子。
Post控制器。方法 'index' 效果很好,显示所有带有相关标签的帖子。在 'fetch' 方法中,我试图获取在函数 'withAnyTag' 中使用它的 slug,如文档中所写 — https://github.com/rtconner/laravel-tagging/
public function index()
{
$posts = Post::orderBy('created_at', 'desc')->paginate(5);
return view('backend.post.index', compact('posts'));
}
public function fetch(Tag $tag)
{
$slug = $tag->slug;
$posts = Post::withAnyTag([$slug])->get()->paginate(5);
return view('backend.post.index', compact('posts'));
}
在 Post 模型中没有什么特别的,只是 trait Taggable。
路线。我觉得没问题,带上以防万一
Route::get('post', [PostController::class, 'index'])->name('posts');
Route::get('post/tag/{tag:slug}', [PostController::class, 'fetch'])->name('posts.fetch');
来自视图 'backend.post.index' 的片段,用于两种方法。链接运作良好,并在右侧领先 url。
@foreach($posts as $post)
<tr>
<td>{!! $post->title !!}</td>
<td>{!! $post->content !!}</td>
<td>
@foreach($post->tags as $tag)
<a href="{{ route('posts.fetch', $tag->slug) }}">{!! $tag->name !!}</a>
@endforeach
</td>
<td>
<a href="/" class="btn btn-sm btn-outline-primary py-0">Read Post</a>
<a href="{{ route('post.edit', $post->slug) }}" class="btn btn-sm btn-outline-success py-0">Edit Post</a>
<form action="{{route('post.destroy', $post->slug)}}" method="POST">
@method('DELETE')
@csrf
<button type="submit" class="btn btn-sm btn-outline-danger py-0">Delete</button>
</form>
</td>
</tr>
@endforeach
{!! $posts->links() !!}
但是,当我点击标签并进入“.../post/tag/tag-slug”页面时,出现错误 'Method Illuminate\Database\Eloquent\Collection::paginate does not exist.' 在方法 'index' 中没有分页错误。
我认为你应该 运行 paginate
直接在 withAnyTag
方法上这样
$posts = Post::withAnyTag([$slug])->paginate(5);
您不需要单独调用 get()
,因为 paginate
将 运行 查询和 return 分页结果。