Laravel - トラブルシュート - Laravel 12 - Collection::paginate does not exist.


クラウディア 


1. 概要
2. 対応

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,
                ]
            );
        });
 キャッシュをクリアして、ウェブサーバを再起動すれば、正常に動作するようになります。

AbemaTV 無料体験