代码之家  ›  专栏  ›  技术社区  ›  Odyssee

用函数替换Laravel查询回调

  •  0
  • Odyssee  · 技术社区  · 6 年前

            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 回复  |  直到 6 年前
        1
  •  1
  •   Paras    6 年前

    是的,你可以用 callables

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

    看看这个 SO thread 了解更多