laravel 自带分页与 groupBy共用


对于laravel来说有很多自带功能,其中laravel的分页就很美观,但是在sql语句中使用groupBy和分页一起查询数据时 ------分页   死了

laravel 自定义分页是不能和groupBy一起使用的  因为laravel底层定义   如下图:

如图




不难看出,框架是取出所有的数据,然后通过array_slice来截取需要的数据段。

这种方式在数据量不大时完全没有问题,当前数据量过3000或更多时,就会报错,主要的错误是内存超出,本来框架查询出来的数据是以对象的形式返回,这样会大大的增加了内存开销。

如果这个时候还想使用框架自带的分页功能,就不能直接使用这个 paginate 函数来分页,必须另作处理:

public function getGroupPages(Builder $Builder,$perPage=null,$columns=array('*')){

$perPage = $perPage ?: $Builder->getModel()->getPerPage();

$Bindings=$Builder->getQuery()

->getConnection()

->prepareBindings($Builder->getBindings());

$BuilderPage=  clone $Builder;

$BuilderPage->getQuery()->orders=null;//去掉无意义的排序

$total=\DB::Connection($Builder->getModel()->getConnectionName())->select('select count(1) as num from ('.$BuilderPage->select($columns)->toSql().') as t',$Bindings)[0]->num;//取出总记录数

$paginator = $Builder->getQuery()->getConnection()->getPaginator();

$page = $paginator->getCurrentPage($total);

$results = $Builder->forPage($page, $perPage)->get($columns)->all();

return $paginator->make($results, $total, $perPage);

}

所以当想使用groupBy查询数据并使用laravel分页时,可以利用limit 及 offset代替laravel自定义分页查询。


原文:http://php2012web.blog.51cto.com/5585213/1579972

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,345评论 0 16
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,759评论 18 399
  • 原文链接 必备品 文档:Documentation API:API Reference 视频:Laracasts ...
    layjoy阅读 8,624评论 0 121
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • 今天是我们团队第一次财富论坛,感觉超级忙,我也是做总代以来第一次自己建群,转播,真的不容易,但是很开心,也愿意帮助...
    刀娅阅读 116评论 0 0