【问题标题】:Method Illuminate\Database\Eloquent\Collection::paginate does not exist方法 Illuminate\Database\Eloquent\Collection::paginate 不存在
【发布时间】:2019-12-11 11:36:42
【问题描述】:

我想在一个刀片中合并两个模型。看看我的代码

public function history_posts_requests () {
    $reports = Report::latest()->where('status', '=', '1')->first()->get();
    $order_mobiles = OrderMobile::latest()->where('status', '=', '1')->first()->get();
    $allOrders = $reports->merge($order_mobiles)->paginate(50);
    return view('Admin.desktops.history_posts_requests', compact('allOrders'));
}

但我收到此错误。

方法 Illuminate\Database\Eloquent\Collection::paginate 不存在。

【问题讨论】:

  • ->paginate() 不是Collection 的方法,这是运行->merge() 时得到的。您将不得不重新考虑您的方法,或者使用->chunk() 方法来模拟分页。
  • @TimLewis 他可以通过使用 Paginator 类来实现这一点,这样他就不会失去 Paginator 类的威力
  • 是的;我看到你的回答了。这只是对他为什么会收到错误的评论,而不是答案。措辞“重新考虑你的方法”以不同的方式使用分页器类/逻辑进行封装。
  • @TimLewis 明白了你的意思,SRP,谢谢。

标签: php laravel laravel-5.8


【解决方案1】:

我建议你使用PaginatorLengthAwarePaginator类来实现分页:

use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;

public function history_posts_requests () {
    $reports = Report::latest()->where('status', '=', '1')->first()->get();
    $order_mobiles = OrderMobile::latest()->where('status', '=', '1')->first()->get();
    $allOrders = $reports->merge($order_mobiles);

    $totalGroup = count($allOrders);
    $perPage = 10;
    $page = Paginator::resolveCurrentPage('page');

    $allOrders = new LengthAwarePaginator($allOrders->forPage($page, $perPage), $totalGroup, $perPage, $page, [
        'path' => Paginator::resolveCurrentPath(),
        'pageName' => 'page',
    ]);


    return view('Admin.desktops.history_posts_requests', compact('allOrders'));
}

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 2020-11-21
    • 2021-09-08
    • 2020-11-13
    • 2019-11-12
    • 2019-05-24
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多