首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复这个雄辩的数据库查询

如何修复这个雄辩的数据库查询
EN

Stack Overflow用户
提问于 2014-01-02 10:59:12
回答 1查看 127关注 0票数 0

下面的代码需要大量的返工。我想把它弄干,只添加分页和排序,如果它是在选项中设置的。你有什么建议来解决这个问题吗?

我尝试过手动分页,但它返回一个数组而不是一个对象,因此我的索引页中断。

UserController:

代码语言:javascript
复制
// 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:

代码语言:javascript
复制
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.');
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-03 17:54:47

我要做的第一件事是在用户模型上创建一个scopeSearch方法,它允许您在任何地方调用$query->search($searchFor) -这将节省大量代码行。阅读有关作用域方法here的信息。如果您愿意,您也可以对排序执行相同的操作。

我要做的第二件事,但这只是我的观点,是通过使存储库成为fluent interface来实现搜索、排序、分页等可链接的方法。我找到了一个很好的答案,深入地解释了如何用here制作一个流畅的界面。

你不必实现一个流畅的接口,但我发现它对于实现DRY是很好的,而传递带有搜索项、过滤器和排序参数的大型数据数组(甚至是一个对象)的替代方案很快就会变得混乱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20875655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档