2014-12-02 92 views
0

我想在Laravel 4,它由AND和OR where子句,在下面的格式,以創建更高級的查詢:Where子句中Laravel可變

(('a','=','1') OR ('b','=','s') OR ('c','=','3')) AND (('d','=','1') OR ('e','=','s') OR ('f','=','3')) 

的問題是,我生成這些查詢基於用戶通過某種形式應用的某些過濾器而實時查詢。這意味着該查詢可以具有以下格式:

a AND b 

以及這種格式:

(a OR b OR c) AND (d OR e OR f) 

還有這樣一條:

(a OR b) AND c AND (d OR e) AND f 

我生成的where子句作爲一個字符串,但我無法設法將此變量添加到方法調用中。

例子:

$whereclause = where(function($query){$query->where('colorgrade','like','41-2');})->where(function($query){$query->where('datetime','>','2014-11-05');}) 

$result = $gin->bales()->$whereclause->take(1000)->get(); 

我得到的錯誤是:

未定義的屬性:照亮\數據庫\雄辯\關係\的hasMany :: $其中(函數($查詢) {$查詢 - >其中( 'colorgrade', '象', '41-2');}) - >其中(函數($查詢){$查詢 - >其中( '日期時間', '>','2014 -11-05');})

如何傳遞生成的where子句(stri ng變量)到上面的鏈接函數?

回答

0

你也許可以這樣做,但我有一個預感,這不適用於變量中的閉包和鏈接方法。見http://php.net/manual/en/functions.variable-functions.php

$result = $gin->bales()->$whereclause()->take(1000)->get(); 

Alternativly可以拆分查詢,以便它的單行中未全部完成。

// Get the initial Query Builder instance 
$query = $gin->bales(); 

$query->where(function($query) { 
    $query->where('colorgrade', 'like', '41-2'); 
}); 

if ($something === 'something') { 
    $query->where('something', $something); 
} else { 
    $query->where('something', 'something_else'); 
} 

// Finally get our results 
$results = $query->take(1000)->get();