Bonjour
pouvez vous me dire pourquoi mon resaltat ne s'affiche pas dans ma vue voici mon code

public function chercher(Request $request)
    {
        $q = $request->input('q');
       $posts = Post::where('name', 'like', '%$q%')->orwhere('ref','like','%$q%')->paginate(5);

        return view('posts.index',compact('posts',$posts));
    }

    et la vue

       @if(count($posts)>0)
       ...
       @else
<p>aucun produits trouvé</p>
@endif

merci

4 réponses


connected
Réponse acceptée

Bonjour,

Ton $posts doit être vide. Est-ce que tu peux rajouter, après ta ligne de requête :

dump($posts);

Normalement il est vide.
Voici comment je ferai :

$name = "%$q%";
$posts = Post::where('name', 'like', $name)->orWhere('ref','like',$name)->paginate(5);

Autre chose à corriger pour le compact il te suffit de faire :

return view('posts.index',compact('posts'));

Tiens moi au courant et bon courage

Edit : j'avais mis du gras dans les parties de code à priori ça ne fonctionne pas.

ihaya lavangy
Auteur
Réponse acceptée

reponse trés compréhensible
je te remercie

trés fort ça marche
mais pourquoi $name = "%$q%" ?

Je te renvoies à la doc php sur les doubles et simples quote : ici
En gros, dans ton cas, le double quote va interpréter ta variable $q tant dis que le simple quote ne le fera pas. Du coup en simple quote SQL verra LIKE '%$q%', $q n'étant pas interprété.

Tu aurais très bien pu mettre le "%$q%" directement dans la condition where et orWhere.

Voilà, j'espère avoir été compréhensible :)