Laravel 全局查询范围抛出已达到最大函数嵌套级别

Laravel global query scope throws max function nesting level reached

我正在尝试替换 query scope with a global query scope,但是虽然我的查询范围工作正常,但全局范围导致以下异常:

Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_ERROR)

Maximum function nesting level of '100' reached, aborting!

这是我的全局范围 apply() 方法

public function apply(Builder $builder)
{
    $builder->whereHas('lifetime', function($query)
    {
        $query->whereNested(function($query)
        {
            $query->whereNull('lifetimes.days')
                ->orWhereRaw('NOW() < DATE_ADD(updated_at, INTERVAL lifetimes.days DAY)');
        });
    });
}

我只是把原来查询范围内的代码提取出来放在这里

问题出在 whereHas() 方法上,它的回调从未被调用过,如果我用另一个查询构建方法(如 where('col', 'value') 替换它,就不会有错误

事实上,它间接调用模型上的 getQuery(),然后用 Model::__call() 处理,然后在模型上再次调用全局范围,包括我的模型,并导致永无止境的递归调用。

堆栈帧(从上到下):

他们已经解决了这个问题。 issue on github