下面的代码需要大量的返工。我想把它弄干,只添加分页和排序,如果它是在选项中设置的。你有什么建议来解决这个问题吗?
我尝试过手动分页,但它返回一个数组而不是一个对象,因此我的索引页中断。
UserController:
// Search term
$src = Request::get('src');
$sort_by = Request::get('sort_by');
$sort_type = Request::get('sort');
$limit = Request::get('limit');
$users = $this->users->search(['email','username','status'], $src, ['paginate' => ['limit' => 5], 'sort' => ['by' => $sort_by, 'type' => $sort_type]]); UserRepository:
public function search($fields, $search_term, $options = array())
{
$users = NULL;
if (is_array($fields))
{
// Check if the user wants to paginate it
if (isset($options['paginate']))
{
$this->pagination_limit = $options['paginate']['limit'];
$users = User::orWhere(function($query) use ($fields, $search_term) {
foreach($fields as $field)
{
$query->orWhere($field, 'LIKE', "%$search_term%");
}
})->paginate($this->pagination_limit);
}
// Return un-paginated result
else
{
$users = User::orWhere(function($query) use ($fields, $search_term) {
foreach($fields as $field)
{
$query->orWhere($field, 'LIKE', "%$search_term%");
}
})->get();
}
}
else
{
throw new \Exception('Fields must be an in the form of array.');
}
}发布于 2014-01-03 17:54:47
我要做的第一件事是在用户模型上创建一个scopeSearch方法,它允许您在任何地方调用$query->search($searchFor) -这将节省大量代码行。阅读有关作用域方法here的信息。如果您愿意,您也可以对排序执行相同的操作。
我要做的第二件事,但这只是我的观点,是通过使存储库成为fluent interface来实现搜索、排序、分页等可链接的方法。我找到了一个很好的答案,深入地解释了如何用here制作一个流畅的界面。
你不必实现一个流畅的接口,但我发现它对于实现DRY是很好的,而传递带有搜索项、过滤器和排序参数的大型数据数组(甚至是一个对象)的替代方案很快就会变得混乱。
https://stackoverflow.com/questions/20875655
复制相似问题