用函数替换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'])
->...