2015-07-10 54 views
1

搜索查詢我想打一個表上的複雜的搜索與20列。 用戶有一種表單,他可以從0到18條標準中選擇進行搜索。我在控制器方法中捕獲這些條件並將結果返回給視圖。問題是我不知道如何構建查詢。我嘗試了2個標準,使用下面的函數,但它不返回一個集合,這對我來說很奇怪dd($items)的輸出是什麼。無論如何,如果我刪除dd($items),函數就不會返回任何東西,就好像它在表中找不到任何東西(這是不可能的,因爲我插入了標準以便函數返回某些內容)。多準則Laravel 5

public function looksomething($param1=null,$param2=null){ 
$query= "all()->"; 
if($param1!=null) 
    $query.="where(’Field1’,’$param1’)"."<br>->"; 
if($param2!=null) 
    $query.="where(’Field2’,’$param2’)"."<br>->"; 
$query.="get()"; 
$items=tablename::query(); 
return view('someview’,['items'=>$items]); 
} 

所以,在上面的函數中,你可以看到我以爲我應該建立我的搜索查詢。它類似於我用於傳統php的模型。 首先,我不知道我做錯了什麼。 其次,Laravel是否有一些內置的機制來構建複雜的搜索查詢?

+0

你使用Elqoent?像模特一樣?和像YOURMODEL :: all()方法? – Reflic

+0

是的,那正是我使用的。 – Texas

回答

3

對於簡單的搜索,你可以定義模型中的scope方法,該方法的參數數組作爲第二個參數,然後添加你需要的任何條款。事情是這樣的:

class SomeModel extends Model 
{ 
    public function scopeFilter($query, array $request) 
    { 
     if ($request->has('column')) { 
      $query = $query->where('column', '=', $request->get('column')); 
     } 

     // And so on... 

     return $query; 
    } 
} 

然後,你可以從你的控制器動作傳遞請求參數模型:

public function index(Request $request) 
{ 
    $results = SomeModel::filter($request->all())->paginate(); 

    return view('some.view', compact('results')); 
} 
+0

所以我猜數組$請求會自動填充來自窗體的數據?如何將表單中的數據傳遞給SomeModel? – Texas

+0

@Texas如果您查看第二個代碼示例,您會看到請求數據通過過濾器作用域傳遞給模型。 –

+0

@MartinBean如何在控制器中使用'scopeFilter'? – joshuamabina