码迷,mamicode.com
首页 > 其他好文 > 详细

laravel框分页使用group后的问题

时间:2014-11-20 12:11:19      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:laravel   分页   groupby   

laravel框中的ORM模型确实很方便,尤其分页操作非常方便,但最近发现一个问题,当我们使用的SQL中添加了groupBy条件后再分页就会有一个问题。

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

不难看出,框架是取出所有的数据,然后通过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;

    $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);

}


这样可以解决数据量大报错的问题。


laravel框分页使用group后的问题

标签:laravel   分页   groupby   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!