Saya perlu memaparkan siaran mengikut tag. Penyelesaian saya berfungsi untuk satu label seperti ini:
Laluan:
Route::get('/posts', [PostController::class, 'index'])->middleware('auth');
Penapis Model Pos:
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); }); } }
Indeks kaedah PostController:
public function index() { return view('posts', [ 'posts' => Post::latest()->filter(request(['tag']))->get() ]); }
Kod ini digunakan pada URL berikut: "http://127.0.0.1:8000/posts/?tag=test". Tetapi saya perlu mencari cara untuk mencari siaran dengan lebih banyak tag, contohnya saya ingin mencari siaran dengan tag "ujian" dan "unit". Untuk melakukan ini saya ingin menggunakan URL seperti ini: "http://127.0.0.1:8000/posts/?tag=test&unit". Saya tersekat kerana saya fikir "permintaan(['tag'])" akan mengembalikan "ujian&unit" tetapi ia hanya mengembalikan "ujian". Adakah mungkin untuk mendapatkan teg "unit" daripada permintaan ini?
Gunakan rentetan pertanyaan (
GET
请求可以接受多个参数。而不是?tag=test&unit
(无论如何都不会真正起作用,因为&unit
将被解析为$request->input('unit')
,并且将是null
,&
ialah aksara terpelihara), anda boleh menghantarnya sebagai:Di bahagian belakang, apabila anda mengakses
request()->input('tags')
anda mendapat tatasusunan berikut:Jadi, menggabungkannya:
whereIn()
request()->input('tags', [])
访问?tags[]=...&tags[]=...
, atau tatasusunan kosong jika tidak disediakan.