Php Where子句作为Laravel中的变量

Php Where子句作为Laravel中的变量,php,laravel,laravel-4,where,Php,Laravel,Laravel 4,Where,我正在尝试在Laravel 4中创建一个更高级的查询,它由AND和OR where子句组成,格式如下: (('a','=','1') OR ('b','=','s') OR ('c','=','3')) AND (('d','=','1') OR ('e','=','s') OR ('f','=','3')) a AND b 问题是,我正在根据用户通过某些表单应用的某些过滤器动态生成这些查询。这意味着查询可以具有以下格式: (('a','=','1') OR ('b','=','s') OR

我正在尝试在Laravel 4中创建一个更高级的查询,它由AND和OR where子句组成,格式如下:

(('a','=','1') OR ('b','=','s') OR ('c','=','3')) AND (('d','=','1') OR ('e','=','s') OR ('f','=','3'))
a AND b
问题是,我正在根据用户通过某些表单应用的某些过滤器动态生成这些查询。这意味着查询可以具有以下格式:

(('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();
我得到的错误如下:

未定义的属性:Illumb\Database\Eloquent\Relations\HasMany:$where(函数($query){$query->where('colorgrade','like','41-2');})->where(函数($query){$query->where('datetime','>','2014-11-05');})


如何将生成的where子句(字符串变量)传递给上述链接函数?

您可以这样做,但是我有一个预感,这不适用于变量中的闭包和链接方法。看

或者,您可以拆分查询,使其不在一行内完成

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

要动态创建查询,最好利用雄辩的查询范围。 这为您提供了一种基于表单选项构建不同查询的方法