我有以下基本查询,可用于通过其关系,范围,排序,过滤等来检索集合。通过扩展该基本查询所在的类,此基本查询可用于几乎所有模型。
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... */);
这可以通过其他方式完成吗,或者什么是一种好的方式或方法呢?
答案 0 :(得分:1)
是的,您可以像这样使用cppreference:
$query->when($request->has('filter'), [$this, 'someMethodNameInClass'])
->...
查看此callables以了解更多信息