Wat ga je maken? Het "Find something"-veld uit het ontwerp gaat werken: typ een woord en zie alle artikelen waarin dat woord voorkomt in de titel of de tekst.

Waarom is dit nuttig? Zoeken is filteren op vrije tekst. Je leert hier hoe je LIKE-queries veilig opbouwt en waarom je gebruikersinvoer nooit rechtstreeks in een query plakt.

Stappenplan

  1. Maak een <form method="GET"> met één <input name="search">. Geen POST — zelfde reden als bij filteren.
  2. Zoek in je controller op titel met where('title', 'like', '%' . $search . '%').
  3. Breid uit naar meerdere kolommen. Let op de haakjes: groepeer je orWhere in een closure, anders zoekt hij per ongeluk door je filters heen.
  4. Voeg het zoekveld toe aan je bestaande filter()scope uit opdracht 2, zodat zoeken en filteren samenwerken.
  5. Toon een nette melding als er niets gevonden is ("Geen resultaten voor …").
  6. Zorg dat de ingetypte zoekterm in het veld blijft staan: value="{{ request('search') }}".

Kleine hulpmiddelen

// Let op de closure om de or-voorwaarden heen!
->when($search, function ($query, $search) {
    $query->where(function ($q) use ($search) {
        $q->where('title', 'like', "%{$search}%")
          ->orWhere('body', 'like', "%{$search}%");
    });
})
@forelse ($posts as $post)
    {{-- kaartje --}}
@empty
    <p>Geen resultaten gevonden voor "{{ request('search') }}".</p>
@endforelse

Valkuilen

Klaar als…