我正在尝试使用由特征加载到特定模型上的作用域,以便在该模型的每个查询上都执行此操作
但
查询无效
public function apply(Builder $builder) {
$builder->where(function($q){$q->whereIn('region_id', array(1,2))
->orWhere('manager_id', 1);
});
}
这是应该执行的操作,但是页面无法加载,因此我检查了apache错误日志并得到了:
[core:notice] [pid 949] AH00051: child pid 2647 exit signal Segmentation fault (11), possible coredump in /etc/apache2
但是,如果我对一个查询应用相同的条件,那么它会起作用:S
Client::where(function($q){
$q->whereIn('region_id', array(1,2))
->orWhere('manager_id', 1);
})->get();
那么,这里出了什么问题?看来构建器不喜欢接受函数,因为不管我放什么函数,它都行不通
为您提供的解决方案-使用whereNested
:
public function apply(Builder $builder) {
$builder->whereNested(function ($q) {
$q->whereIn('region_id', array(1,2))
->orWhere('manager_id', 1);
});
}
解释:
$builder->where
Eloquent\Builder
方法,导致无限循环,因为它调用的是不带作用域的新查询,即调用新查询的第一个引导作用域...
尽管:
$builder->whereNested
underylingQuery\Builder
方法,可以按预期工作。Query\Builder
由于缺少和魔术方法whereNested
上的方法,因此将函数调用转发给对象。Eloquent\Builder
__call
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句