【Laravel】all()の後にpaginateが使えない?原因と解決方法
こんにちは!CODE CLUB965のKです!
今回は、LaravelでDBからデータを取得する際に、テーブルのデータを全て取得してpaginateで取得件数を指定したいときに起きた事を書こうと思います。
all()の後にpaginateが使えなかった
Usersというテーブルから作成日順に並び替えてから、paginateを使って10件ずつデータを表示したかったので、
$users = Users::all()->sortBy("created_at")->paginate(10);
で、大丈夫だと思い実行してみるとエラーになってしまいました。
エラーの内容は、
Method Illuminate\\Database\\Eloquent\\Collection::paginate does not exist.
と出ていました。
「paginateがない!?なんで?」となりましたが、調べてみるとちゃんと原因がありました。
原因と解決方法
まず、原因ですが簡単にまとめると、all()というメソッドはcollectionメソッドであり、collectionメソッドにはpaginateのようなメソッドがないためエラーが出たようです。
StackOverflowにも私と同じようなことで質問をしている方がいましたので、参考に見てみるといいと思います。
https://stackoverflow.com/questions/48148472/laravel-method-paginate-does-not-exist
解決方法ですが、
Users::orderBy('created_at')->paginate(10);
これで、問題なくできました。
よく見ると、最初に書いたコードは、「sortBy」を使っていますが、これはcollectionメソッドなので使えません。
そのため、「orderBy」を使っています。
ちなみに、複数の条件で並び替えたい場合は「orderByRaw」を使うといいです。
最後に
ちょっとした事ですが、知らないとなんでエラーが出たのか分からないので意外と焦りますよね。笑
でも、ちゃんとエラーの内容を読んで調べれば、必ず解決に繋がる情報はあるので、落ち着いて対応しましょう。
それでは、また!