2017-10-19 68 views
0

我試圖在我的控制器中編寫一個方法,以允許在我的查看頁面上搜索我的查詢結果。該查詢選擇「廣告」表中的所有結果,並且此方法應允許通過廣告的名稱在搜索欄中輸入關鍵字來過濾結果。 控制器代碼是這樣的:在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); 
     } 
    } 

然而,當我運行搜索,我得到了以下錯誤:「缺少參數2照亮的\ Support \收藏::其中()」。 我在做什麼錯?

+1

移動你的' - >獲得()'從'$ query'線後函數的'})' – fez

+0

感謝您的建議,但不幸的是它沒有區別:/ – Davi

回答

0

頂部,在做$ads = Ad::paginate(10);時,您已經從數據庫中提取結果,因此不需要在數據庫級別進行更多篩選。

我會做這樣的事情,而不是:

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

而不是廣告::選擇我不得不使用Ad :: all();否則它不會選擇任何東西。仍然收到相同的錯誤消息。另外,如果我把paginate(10)放在建議的地方,我會發現一個新的錯誤:「方法分頁不存在。」 – Davi

+0

如果您使用'Ad :: all()',則您再次從數據庫中提取結果,因此無法進行更多搜索或分頁。 'Ad :: select()'應該可以正常工作,但是如果它不嘗試用'$ ads = new Ad'代替該行;' – Tudor

+0

替換Ad :: all/select()爲$ ads = new Ad, ?它結束了一個新的錯誤:/ – Davi