如何合并集合和查询构建器然后对其使用分页 Laravel 8
How to merge collection and Query builder then use paginate on it Laravel 8
我有一个生成器对象和一个集合,我想将它们组合起来并使用 laravel 的分页。
我该怎么做?
public function getRequests(){
$closedRequests = request::join('request_logs', 'request_logs.request_id', '=', 'requests.id')
->select("requests.id", "requests.user_id", "requests.form_type", "requests.created_at", "requests.request_status")
->whereNotIn('request_status', [-2, 0])
->where('request_logs.user_id', Auth::user()->id);
$processingRequests = request::select("requests.id", "requests.user_id", "requests.form_type", "requests.created_at", "requests.request_status")
->where('request_status', 0)
->get()
->filter(function ($request) {
return FormsController::checkUserPermissionToConsultForm($request, true);
});
$closedRequests = $closedRequests->union($processingRequests)
->orderBy('created_at', 'desc')
->paginate(5);
return $closedRequests;
}
上面的函数是我尝试做的,但它产生了一个错误提示
Call to a member function getBindings() on array
嗯,在 Laravel 中没有默认方法可用于执行此类操作。你可以做的是根据你的需要使用 Illuminate\Pagination\Paginator
或 Illuminate\Pagination\LengthAwarePaginator
来制作一个。 Illuminate\Pagination\Paginator
指的是 simplePaginate()
方法,其中 Illuminate\Pagination\LengthAwarePaginator
指的是 paginate
方法。
另一种方法是将生成器结果转换为集合。然后合并builder集合和$processingRequests
集合,使用forPage()
方法,也是一种集合方法,稍作修改生成分页。
参考文献如下:
自定义分页:https://laravel.com/docs/8.x/pagination#manually-creating-a-paginator
页面:
https://laravel.com/docs/8.x/collections#method-forpage
https://stillat.com/blog/2018/04/22/laravel-5-collections-paginating-collections-with-forpage
我有一个生成器对象和一个集合,我想将它们组合起来并使用 laravel 的分页。
我该怎么做?
public function getRequests(){
$closedRequests = request::join('request_logs', 'request_logs.request_id', '=', 'requests.id')
->select("requests.id", "requests.user_id", "requests.form_type", "requests.created_at", "requests.request_status")
->whereNotIn('request_status', [-2, 0])
->where('request_logs.user_id', Auth::user()->id);
$processingRequests = request::select("requests.id", "requests.user_id", "requests.form_type", "requests.created_at", "requests.request_status")
->where('request_status', 0)
->get()
->filter(function ($request) {
return FormsController::checkUserPermissionToConsultForm($request, true);
});
$closedRequests = $closedRequests->union($processingRequests)
->orderBy('created_at', 'desc')
->paginate(5);
return $closedRequests;
}
上面的函数是我尝试做的,但它产生了一个错误提示
Call to a member function getBindings() on array
嗯,在 Laravel 中没有默认方法可用于执行此类操作。你可以做的是根据你的需要使用 Illuminate\Pagination\Paginator
或 Illuminate\Pagination\LengthAwarePaginator
来制作一个。 Illuminate\Pagination\Paginator
指的是 simplePaginate()
方法,其中 Illuminate\Pagination\LengthAwarePaginator
指的是 paginate
方法。
另一种方法是将生成器结果转换为集合。然后合并builder集合和$processingRequests
集合,使用forPage()
方法,也是一种集合方法,稍作修改生成分页。
参考文献如下:
自定义分页:https://laravel.com/docs/8.x/pagination#manually-creating-a-paginator
页面:
https://laravel.com/docs/8.x/collections#method-forpage https://stillat.com/blog/2018/04/22/laravel-5-collections-paginating-collections-with-forpage