用函数替换Laravel查询回调

用函数替换Laravel查询回调,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我有以下基本查询,用于检索集合及其关系、作用域、排序、筛选等,。。。通过扩展此基本查询所在的类,此基本查询几乎用于我的所有模型 return $this->runSortQuery( $query->when($request->has('filter'), function($query) use ($request) { return $query->sea

我有以下基本查询,用于检索集合及其关系、作用域、排序、筛选等,。。。通过扩展此基本查询所在的类,此基本查询几乎用于我的所有模型

        return $this->runSortQuery(
            $query->when($request->has('filter'),
                function($query) use ($request) {
                    return $query->search($request->filter);
                }
            )->when($request->has('with'), 
                function($query) use ($request) {
                    return $query->with(
                        explode(',', $request->with)
                    );
                }
            )->when($request->has('scopes'),
                function($query) use ($request) {
                    return $query->scopes(
                        json_decode($request->scopes, true)
                    );
                }
            ) /* and so on... */, $request
        )->paginate((isset($request->paginate)) ? $request->paginate : 15);
是否可以用自定义函数调用替换每个
中的回调?我之所以要这样做,是因为这个基函数越来越长,我希望回调函数中的方法在它自己的函数中,为了可读性和保持可维护性

我试过了,但显然不行

$query->when($request->has('filter'), $this->filter($query, $request->filter))
      ->when($request/* and so on... */);
这可以用另一种方式完成吗?或者什么样的模式或方法可以完成这一任务?

是的,您可以这样使用:


查看此以了解更多信息

此软件包(是的,它是我制作的)可以帮助您;除此之外,我无法真正理解你想要实现什么。也许使用正确?我只是想将回调提取到一个单独的函数。用for exapmle$this->methodName($q,$x)`替换
函数($query)使用($x){…}
,使我的基本方法尽可能干净。但正如所料,当您像调用
$this->someMethodName($q,$x)
一样调用它时,
$q
是未定义的。我读了很多书来寻找解决方案,我想这是不可能的,但我已经找到了一些适合这种情况的方法,如果我找到了一些有效的方法,我会不断更新。
$query->when($request->has('filter'), [$this, 'someMethodNameInClass'])
    ->...