1. 概要
エラーメッセージは、正確には。
Method Illuminate\Support\Collection::paginate does not exist.
です。
本ページは、下記のサイトを参考にさせていただきました。
「[エラー]Method Illuminate\Support\Collection::paginate does not exist. 」
これは、ページネーション(ページ付け「Pagination - Wikipedia」、行数が多い時にページごとに行を振り分ける処理)で発生しているエラーのようです。
2. 対応
参考サイトには、「どうやら Laravel は Eloquent コレクションにページネーションを提供していますが、デフォルトでは使用できないらしい」と書かれています。
慣習的に「app/Providers/AppServiceProvider.php」をいじるらしい。
vi [project path]/app/Providers/AppServiceProvider.php
デフォルトで、下記のように書かれています。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
//
}
}
5行目の後に、下記を追加。
use Illuminate\Support\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
21~23行の間、「boot」メソッド内に下記を記述します。
Collection::macro('paginate', function ($perPage, $total = null, $page = null, $pageName = 'page')
{
$page = $page ?: LengthAwarePaginator::resolveCurrentPage($pageName);
return new LengthAwarePaginator(
$this->forPage($page, $perPage)->values(),
$total ?: $this->count(),
$perPage,
$page,
[
'path' => LengthAwarePaginator::resolveCurrentPath(),
'pageName' => $pageName,
]
);
});
キャッシュをクリアして、ウェブサーバを再起動すれば、正常に動作するようになります。