2014-09-30 69 views
1

條件查詢我有使用::->運營商型號語法創建基於其他變量Laravel

假設我想作一些簡單的搜索問題。我能做到這樣:

$model = SomeModel::where('id', '>', 2)->where('id', '<', 10)->get(); 

型號名稱後,我需要使用::操作,然後標準->運營商。

但現在假設我們有一些變量$minId$maxId如果這些變量的值是空的,我們不希望使用那裏的條件:

$minId = ''; 

$maxId = ''; 

$model = SomeModel::where('id','>','0'); // dummy where here 

if ($minId != '') { 
    $model = $model->where('id','>',$minId); 
} 
if ($maxId != '') { 
    $model = $model->where('id','<',$maxId); 
} 
$model = $model->get(); 

的問題是如何的條件使用前::。您不能使用$model = SomeModel::,所以我添加了虛設,其中where('id','>','0')始終爲真。現在在條件where我可以使用->運營商沒有問題。

是否可以在不使用額外條件的情況下以其他方式完成?

回答

4

第一獲取查詢(這是雄辯無論如何都會做):

$query = Model::query(); 

if (..) { $query->where(..) } 
if (..) { $query->where(..) } 

$query->get(); 

而且這樣的事情,你可以使用範圍,例如:

// Model 
public function scopeMinId($q, $id) 
{ 
    if (! empty($id)) $q->where('id', '>=', $id); 
} 

然後你就可以很容易地使用(不管是什麼minIdmaxId設置爲):

Model::minId($minId)->maxId($maxId)->get(); 
+0

謝謝。 'query()'是我在這裏需要的 – 2014-09-30 11:11:53