l5-repository 怎么拼接搜索条件
原因
最近项目引入了 l5-repository 这个组件,然后发现当列表有搜索条件的时候,写的很别扭。因为这个组件支持的搜索格式很奇怪:
'http://prettus.local/users?search=John%20Doe'
这样:
'http://prettus.local/users?search=John&searchFields=name:like'
还有这样:
'http://prettus.local/users?search=age:17;email:john@gmail.com&searchJoin=and'
我沉默了一下,那我写个组装搜索条件的方法去兼容它?
我的感觉还是很奇怪。
又去看了它的 criteria 类,需要建一个这样的类,把搜索条件写进去,然后调用方法应用这个搜索类。
那只有一个搜索条件的情况下,建一个搜索类也不是很划算。
而这个 repository 组件没有 where 方法,自己拼接搜索条件也不行。
用后感
不知道是我的使用方法不正确,总是觉得这个组件很鸡肋,因为 ORM 方法用不了了,而 repository 也没有这些功能。结果导致控制器里有些地方是用 ORM,有些地方用 repository。
补充:用 scopeQuery
方法可以实现,这种写法看着还是难受的
$repository->scopeQuery(function ($query) use ($request) {
if ($keyword = $request->get('keyword')) {
$query = $query->where('keyword', $keyword);
}
return $query;
});
提问
有没有更好的解决方法?
可以不用建 criteria,不用管它的搜索格式。
推荐文章: