2014-06-11 41 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