我喜欢使用Laravel的groupBy功能 https://laravel.com/docs/5.6/collections#method-groupby
但是,我不能将它与paginate(x)函数一起使用,因为它返回有限数量的结果。 SQL Query和Laravel Collections的GroupBy的Groupby完全不同。如果我在查询中使用groupby,它并不能给我我想要的东西。例如,我只想打字,我得到了我想要的一切。
$notifications = $notifications->groupBy('order_id');
例如,这是我的查询
$notifications = DB::table('sent_notifications as a')
->join('sent_notification_results as b', 'a.sent_notification_result_id', '=', 'b.sent_notification_result_id')
->join('orders as c', 'c.order_id', '=', 'a.order_id')
->join('sellers as d', 'c.seller_id', '=', 'd.seller_id')
->join('companies as e', 'd.company_id', '=', 'e.company_id')
->join('notification_templates as f', 'f.notification_template_id', '=', 'a.notification_template_id')
->join('notification_types as g', 'g.notification_type_id', '=', 'f.notification_type_id')
->join('default_notification_templates as h', 'h.default_notification_template_id', '=', 'f.default_notification_template_id')
->where('e.company_id', $company_id)
->select('*')
->orderBy('a.created_at','DESC')
->paginate(20);
$pagination_links = $notifications->links();
如何使用Collection的groupby方法和分页?
答案 0 :(得分:0)
我在一个存在类似问题的项目中工作,并提出了此解决方案。
public function index(Request $request)
{
$posts = Post::all()
->paginate($request->get('per_page', 25));
$grouped_by_date = $posts->mapToGroups(function ($post) {
return [$post->published_date => $post];
});
$posts_by_date = $posts->setCollection($grouped_by_date);
return view('posts.index', compact('posts_by_date'));
}