Laravel

Laravelでモデルがnot foundするときの解決方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Laravel では度々、モデルが not found することがあります。

エラーでいうところ

Symfony\Component\Debug\Exception\FatalThrowableErrorClass 'App\Http\Controllers\Post' not found
Symfony\Component\Debug\Exception\FatalThrowableErrorClass 'App\Post' not found

こんな感じのエラーです。

これは伝統芸能みたいなもので、全員が体感するエラーです。

これから紹介する解決方法を順番に検証してみてください。

【関連記事】Laravel でデバッグする方法

なぜエラーが起こるのか?

①「このモデル(クラス)を使います」という宣言がない

② モデル(クラス)が読み込まれていない

③ そもそもファイルがない

ほぼほぼこの3つだと思います。

もちろんプログラミングでは例外も存在すると思いますが、現状この1〜3でほぼ全てなのではないでしょうか?

use App\Post を書く

これは ① の解決方法になります

コントローラーの上部でモデルを use してあげてください。

<?php

namespace App\Http\Controllers\Client;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

//以下追記
use App\Post;

モデルがどこにあるのか、階層に気をつけて記述してください。

use App\Models\Post;

の可能性もあります。

use App\Post が間違っている

クラスの位置(ファイルの位置)が間違っていてもだめなので、正確な階層で記述する必要があります。

正しい階層で書かれているか確認してみてください。

クラスがキャッシュされていない

少し難しいですが、モデルやコントローラーなどのクラスは、場所がキャッシュされて呼び出されます。

「この場所に、こういう名前のクラスがある」

というのをキャッシュが情報として持っているということです。

そのキャッシュに情報がないときはこのエラーになります。

例えば、ファイルをコピーして手動で複製した時は、キャッシュがないのでエラーになります。

そのときは、

composer dump-autoload

というコマンドを打てば大抵キャッシュしてもらえます。

namespace が間違っている

ファイルをコピーした、移動した、自作したとき、保存されているディレクトリと namespace が間違っていることがあります。

namespace の確認をしましょう。

namespace App;

もし間違っていたら、namespace を編集して

composer dump-autoload

のコマンドを打ちましょう。コマンドを打つ理由としてはクラスがキャッシュされていないの項目のとおりです。

そもそもファイルがない可能性があります

意外とあるのがファイル自体がないというエラーです。

コマンド打ったときに実はエラーが出ていることがあって、それで生成などされていない可能性があります。

これらのエラーを起こさない最善策

オススメしたいのが、

ファイルは絶対にコマンドで生成する

ということです。

モデルの生成コマンドであれば、

php artisan make:model Models/Post

このコマンドでモデルが作成されます。

コマンドで生成すれば、ちゃんとファイルの情報がキャッシュされますので、変な事故が減ります。

もし内容をコピーしたいのであれば、ファイル生成はコマンドで行って、中身をコピペしてあげると良いと思います。

まとめ

以上です。

このエラーは逆に見慣れるのでそのうち仲良くなれるエラーだと思います。

この記事で解決できたらぜひ Twitter などで共有お願いします。

感想・苦情は TwitterDM にご連絡ください。

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する