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();