LoginSignup
1
0

More than 3 years have passed since last update.

LaravelのPaginateでエラーが出たワケ

Posted at

はじめに

初めてLaravelを触ってみました。プログラミング初心者らしすぎる凡ミスですが、記録的として残したいと思います。

環境

PHP 7.4
Laravel 6.20.8

エラー内容

BadMethodCallException
Call to undefined method App\XXX(model)::links() (View: /work/resources/views/XXX.blade.php)

Paginateメソッドについて

Laravelにはページネーションがデフォルトで備わっています。
例えば

UserController
$users = User::orderBy('created_at', 'desc')->paginate(10);
return view('user.index', ['users' => $users ]);
users.blade.php
@foreach($users as $user)
{{ $user->name }}
@endforeach

{{ $users->links() }}

これだけで、10件ごとにユーザー名が表示されるページネーションが簡単にできます。

今回のエラーの原因

Laravelでは、テーブル名を複数形、モデルを単数形にするというルールがありますが、今回私はどうしてもinfoという不可算名詞を使用したかったため、任意の名前でテーブル名を設定しました。
ですので、viewのforeachをこれまで書いていたものと同様、Laravelに頼りすぎて何も考えず下記のように書きました。

example.blade.php
@foreach($info as $info)
{{ $info->name }}
@endforeach

{{ $info->links() }}

すると先程のエラー。
変数がオーバーライドされるので、当たり前ですね...下記のように変更(例)しました。

example.blade.php
@foreach($info as $information)
{{ $information->name }}
@endforeach

{{ $info->links() }}

無事ページネーションができました。

おわりに

恥ずかしながらLaravelの便利さ故に詰まってしまいました。自分で任意の名前でテーブル名を設定できますが、できれば変なところで詰まりたくないので、Laravelではできるだけ命名規則に従っておこうと思います。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0