我需要按標籤顯示貼文。我的解決方案適用於單一標籤,如下所示:
路線:
Route::get('/posts', [PostController::class, 'index'])->middleware('auth');
後模型篩選器:
public function scopeFilter($query, array $filters) { if ($filters['tag'] ?? false) { $tagId = Tag::where('name', $filters['tag'])->first()->id; $query->whereHas('tags', function($q) use ($tagId) { $q->where('tag_id', $tagId); }); } }
PostController 的方法索引:
public function index() { return view('posts', [ 'posts' => Post::latest()->filter(request(['tag']))->get() ]); }
此程式碼適用於下列網址:「http://127.0.0.1:8000/posts/?tag=test」。但我需要找到一種方法來搜尋具有更多標籤的帖子,例如我想尋找帶有“test”和“unit”標籤的帖子。為此,我想使用以下網址:「http://127.0.0.1:8000/posts/?tag=test&unit」。我卡住了,因為我認為“request(['tag'])”將返回“test&unit”,但它只返回“test”。是否有可能以某種方式從此請求中獲取“unit”標籤?
使用查詢字串的
GET
請求可以接受多個參數。而不是?tag=test&unit
(無論如何都不會真正起作用,因為&unit
將被解析為$request->input('unit')
,並且將是null
,&
是保留字元),您可以發送為:在後端,當你存取
request()->input('tags')
時,你會得到以下陣列:所以,把它們放在一起:
whereIn()
處理多個值request()->input('tags', [])
存取?tags[]=...&tags[]=...
,如果未提供則為空數組。