Laravel全球范围不适用于嵌套位置

马兹

我正在尝试使用由特征加载到特定模型上的作用域,以便在该模型的每个查询上都执行此操作

查询无效

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

那么,这里出了什么问题?看来构建器不喜欢接受函数,因为不管我放什么函数,它都行不通

贾里克·特卡奇克(Jarek Tkaczyk)

为您提供的解决方案-使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章