Je dois afficher les publications par balises. Ma solution fonctionne pour une seule étiquette comme ceci :
Itinéraire :
Route::get('/posts', [PostController::class, 'index'])->middleware('auth');
Filtre post-modèle :
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); }); } }
Indice de la méthode PostController :
public function index() { return view('posts', [ 'posts' => Post::latest()->filter(request(['tag']))->get() ]); }
Ce code s'applique à l'URL suivante : "http://127.0.0.1:8000/posts/?tag=test". Mais je dois trouver un moyen de rechercher des publications avec plus de balises, par exemple, je souhaite trouver des publications avec les balises « test » et « unité ». Pour ce faire, je souhaite utiliser une URL comme celle-ci : "http://127.0.0.1:8000/posts/?tag=test&unit". Je suis bloqué parce que je pensais que "request(['tag'])" renverrait "test&unit" mais il ne renvoie que "test". Est-il possible d'obtenir d'une manière ou d'une autre la balise « unité » à partir de cette requête ?
Utilisez la chaîne de requête (
GET
请求可以接受多个参数。而不是?tag=test&unit
(无论如何都不会真正起作用,因为&unit
将被解析为$request->input('unit')
,并且将是null
,&
est un caractère réservé), vous pouvez l'envoyer comme :Dans le backend, lorsque vous accédez à
request()->input('tags')
, vous obtenez le tableau suivant :Alors, en les assemblant :
whereIn()
request()->input('tags', [])
访问?tags[]=...&tags[]=...
, ou un tableau vide s'il n'est pas fourni.