如何对对象数组laravel进行分页?

时间:2015-03-13 07:24:08

标签: php laravel laravel-4

当我尝试对从登录用户传递的结果进行分页时,我收到错误:

$message = Auth::user()->Notifications()->orderBy('created_at', 'desc')->get()
        ->groupBy(function($date) {
            return Carbon::parse($date->created_at)->format('M d'); // grouping by day
        })
        ->paginate(2);

调用未定义的方法Illuminate \ Database \ Eloquent \ Collection :: paginate()

问题是什么?如何对对象数组进行分页?

2 个答案:

答案 0 :(得分:1)

试试这个:

$message = Auth::user()->Notifications()->orderBy('created_at', 'desc')
    ->groupBy(function($date) {
        return Carbon::parse($date->created_at)->format('M d'); // grouping by day
    })->paginate(2);

paginate方法需要是链中的最后一个元素like-> get()

//编辑:如此处所述:http://laravel.com/docs/4.2/pagination

  

注意:目前,Laravel无法有效地执行使用groupBy语句的分页操作。如果您需要将groupBy与分页结果集一起使用,建议您手动查询数据库并使用Paginator :: make。

这也可能有所帮助:http://www.jenssegers.be/blog/57/laravel-pagination-with-grouping-and-eager-loading

答案 1 :(得分:0)

当然,您会收到错误,因为groupBy会返回Illuminate\Support\Collection的实例。您需要执行类似

的操作
$messages = Auth::user()->Notifications()->orderBy('created_at', 'desc')->paginate(2);

$messages->setItems($messages->groupBy(function($date) {
            return $date->created_at->format('M d'); // grouping by day
        }));

这样,您可以在分页对象中设置新项目,这些项目是数据库的分组结果。