Wat ga je maken?
De knoppen "Category" en "Other Filters" uit het voorbeeldontwerp gaan echt werken. Je bezoeker kiest een categorie en ziet alleen de artikelen uit die categorie.
Waarom is dit nuttig?
Filteren is de standaardvraag bij elke webshop, vacaturebank en portfolio. Je leert hier bovendien hoe je een query stap voor stap opbouwt in plaats van in één keer.
/artikelen?category=techniques) of via een POST-formulier? Kies de URL. Dan kan iemand een gefilterde lijst delen en werkt de terugknop van de browser.$request->query('category').when(), zodat het filter alleen wordt toegepast als er een waarde is.selected op de juiste <option>).>withQueryString() erachter, anders ben je je filter kwijt op pagina 2.// Startpunt in je controller — vul zelf aan met je eigen kolommen
$posts = Post::query()
->when($request->query('category'), function ($query, $slug) {
$query->whereHas('category', fn ($q) => $q->where('slug', $slug));
})
->latest()
->paginate(9)
->withQueryString();
// Netter: een scope in app/Models/Post.php
public function scopeFilter($query, array $filters)
{
// hier komt jouw logica
}
// In de controller wordt het dan:
Post::filter($request->only(['category', 'search']))->paginate(9);
dd($posts->toSql()) laat zien welke SQL Laravel bouwt.id in plaats van op slug geeft lelijke URL's (?category=4). Gebruik slugs.when()blokken, niet met if/else.