将Laravel查询回调替换为函数

时间:2018-10-10 13:46:49

标签: laravel laravel-5 eloquent

我有以下基本查询,可用于通过其关系,范围,排序,过滤等来检索集合。通过扩展该基本查询所在的类,此基本查询可用于几乎所有模型。

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

是否可以用自定义函数调用替换每个when中的回调?我想要这个的原因是因为这个基本函数真的很长,我希望回调函数中的方法是它自己的函数,以提高可读性并保持可维护性。

我尝试了这个,但这显然行不通。

$query->when($request->has('filter'), $this->filter($query, $request->filter))
      ->when($request/* and so on... */);

这可以通过其他方式完成吗,或者什么是一种好的方式或方法呢?

1 个答案:

答案 0 :(得分:1)

是的,您可以像这样使用cppreference

$query->when($request->has('filter'), [$this, 'someMethodNameInClass'])
    ->...

查看此callables以了解更多信息