2017-10-19 6 views
0

J'essaie d'écrire une méthode dans mon contrôleur pour permettre la recherche des résultats de ma requête sur ma page d'affichage. La requête sélectionne tous les résultats de la table "ads" et cette méthode doit permettre de filtrer les résultats par le nom de l'annonce en entrant des mots-clés dans la barre de recherche. Le code du contrôleur va comme ceci:Rechercher toutes les méthodes manquantes où argument dans Laravel 5

public function index(Request $request) 
    { 
     $title = trans('ad.title'); 
     $ads = Ad::paginate(10); 

     if (!empty($request->input('search_all'))) { 
      $search_all = urldecode($request->input('search_all')); 
      $ads->where(function ($query) use ($search_all) { 
      $query->where('name', 'like', '%'.$search_all.'%')->get(); 

      }); 

     }else { 
      // Returning to view 
      return view('admin.ad.list') 
      ->with('ads', $ads) 
      ->with('title', $title); 
     } 
    } 

Cependant, quand je lance une recherche que je reçois l'erreur suivante: "Missing argument 2 pour Illuminate \ Support \ Collection :: où()". Qu'est-ce que je fais de mal?

+1

Déplacez votre '-> get()' de la ligne 'query' de $ à après de la fonction'}) ' – fez

+0

Merci pour la suggestion, mais malheureusement, cela ne faisait aucune différence:/ – Davi

Répondre

0

En haut, lorsque vous exécutez $ads = Ad::paginate(10);, vous avez déjà extrait les résultats de la base de données afin que plus aucun filtrage ne puisse être effectué au niveau DB.

je ferais quelque chose comme ceci:

public function index(Request $request) 
{ 
    $title = trans('ad.title'); 
    $ads = Ad::select(); 

    if ($request->input('search_all')) { 
     $search_all = urldecode($request->input('search_all')); 
     $ads->where('name', 'like', '%'.$search_all.'%'); 
    } 

    // Returning to view 
    return view('admin.ad.list') 
     ->with('ads', $ads->paginate(10)) 
     ->with('title', $title); 
} 
+0

Au lieu de Ad :: select, j'ai dû utiliser Ad :: all(); sinon, il ne sélectionne rien. Toujours obtenir le même message d'erreur. De plus, si je mets paginate (10) où je suggère une nouvelle erreur: "La méthode paginate n'existe pas." – Davi

+0

Si vous utilisez 'Ad :: all()', vous obtenez à nouveau les résultats de la base de données, donc aucune autre recherche ou pagination ne peut être effectuée. 'Ad :: select()' devrait fonctionner correctement, mais s'il n'essaie pas de remplacer cette ligne par '$ ads = new Ad;' – Tudor

+0

Remplacer Ad :: all/select() par $ ads = new Annonce, seulement ? Il finit dans une nouvelle erreur: / – Davi