はじめに
初めて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ではできるだけ命名規則に従っておこうと思います。
参考