微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何合并集合和查询构建器,然后在 Laravel 中进行 pginate

如何解决如何合并集合和查询构建器,然后在 Laravel 中进行 pginate

我有一个构建器对象和一个集合,我想将它们组合起来并使用 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.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\PaginatorIlluminate\Pagination\LengthAwarePaginator 制作一个。 Illuminate\Pagination\Paginator 指的是 simplePaginate() 方法,其中 Illuminate\Pagination\LengthAwarePaginator 指的是 paginate 方法。

另一种方法是将构建器结果转换为集合。然后合并构建器集合和 $processingRequests 集合并使用 forPage() 方法,该方法也是一个集合方法,通过一些修改生成分页。

参考资料如下:

自定义分页:https://laravel.com/docs/8.x/pagination#manually-creating-a-paginator

forPage:

https://laravel.com/docs/8.x/collections#method-forpage https://stillat.com/blog/2018/04/22/laravel-5-collections-paginating-collections-with-forpage

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。