2014-06-11 44 views
1

我有一個需要完成的搜索查詢。但是,搜索並不總是具有所有的值,如在這種情況下。只有在Laravel雄辯中存在價值的情況下才查詢「Where」

$aEvents = DB::table('events') 
->where('client_id', '=', $client_id); 

問題是,我怎麼能讓這個where語句取決於$ client_id的值。所以如果這個值是空的,我不想讓Where語句發生。

此外,我不想用PHP中的if語句編寫幾個完整的查詢。對許多變量。理想情況下,我想是這樣的:(!真)

$aEvents = DB::table('events') 
->(($client_id != "") ? where('client_id', '=', $client_id) : ""); 

使用雄辯是好的和保存,但我還沒有了,如果性病類對象的語句我想與速度。任何幫助表示讚賞。

回答

2

你可以嘗試這樣的事:

$query = DB::table('events'); 
if(!empty($client_id)) { 
    $query->where('client_id', $client_id); 
} 
$aEvents = $query->get(); // Call this at last to get the result 

如果您通過form/query string(user input)傳遞client_id到服務器,那麼你可以嘗試這樣的事:

if($client_id = Input::get('client_id')) { 
    $query->where('client_id', $client_id); 
} 

更新:對於分頁試試這個:

$ aEvents = $ query-> paginate(10); //爲10%

所以,你可以調用links()方法,在你看來,如果你將它傳遞這樣的:

return View::make('viewName')->with('aEvents', $aEvents); 

在視圖中的分頁鏈接:

$aEvents->links() 
+0

閱讀更多關於模型查詢範圍感謝您的評論,但unfortunatally這不起作用。它會在我試圖拆分查詢時立即引發異常。 「調用未定義方法Illuminate \ Database \ Query \ Builder :: links()」 – Matt

+0

您正在調用'links()',這就是爲什麼''調用未定義的方法Illuminate \ Database \ Query \ Builder :: links() 。 –

+0

如果你想分頁鏈接,然後嘗試'$ aEvents = $ query-> paginate(10); ','10'可以是任何數字(每頁項目)。 –

0

你也可以爲此使用模型中的查詢範圍。範圍允許您輕鬆地在模型中重用查詢邏輯。從您的控制器

public function scopeClientID($query, $client_id) 
{ 
    if ($client_id != '') { 
     return $query->where('client_id', '=', $client_id); 
    } else { 
     return $query; 
    } 
} 

然後或無論你從調用它,你可以執行以下操作:在模型Event,您可以添加下面的查詢範圍

$aEvents = Event::clientID($client_id); 

如果你想讓所有的結果,那麼你可以做:

$aEvents = Event::clientID($client_id)->get(); 

或者,如果你想分頁,你可以這樣做:

$aEvents = Event::clientID($client_id)->paginate(); 

你也可以用其他方法鏈接它,就像你在一個雄辯的查詢中做的那樣。

您可以在http://laravel.com/docs/eloquent#query-scopes