laravel 自带分页与 groupBy共用
来源:互联网 发布:stm32固件库源码下载 编辑:程序博客网 时间:2024/05/22 03:22
对于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
- laravel 自带分页与 groupBy共用
- laravel 关联关系 自定义分页(还是采用与laravel自带的样式相同)
- laravel中分页带参数
- laravel 自带消息notification
- laravel 搜索分页 带参数稳定分页
- laravel与分页
- GridView 自带分页
- laravel groupby 分组
- Laravel-ORM带条件搜索分页
- laravel框架自带的邮件类
- laravel 框架自带表单验证
- laravel框架自带验证码使用
- DataGrid的自带分页
- ibatis 自带分页方法
- gridview自带分页《续》
- ibatis 自带的分页
- ibatis 自带分页方法
- Hibernate 自带分页 bug
- 程序员头疼的 4 种类型,你 99% 中枪了
- 让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第4篇
- 理解、学习与使用 Java 中的 Optional
- try catch 和 throw
- AHK菜鸟入门之疑难解答1000个为什么及使用技巧
- laravel 自带分页与 groupBy共用
- 这才是真正的表扩展方案
- jsp语法
- java总结
- 李飞飞力赞论文:描述视频密集事件新模型 !(附论文)
- Hadoop Hive sql语法详解
- TP关闭调试模式后报错
- 阿里专家:技术变化那么快,程序员如何做到不被淘汰?
- 【第1107期】iPhone X 适配 手Q H5页面通用解决方案