目的
- idカラムの値を指定してレコードのデータを取得しようとした際にエラーが発生した話をまとめる
実施環境
- ハードウェア環境
項目 | 情報 |
---|---|
OS | macOS Catalina(10.15.5) |
ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
プロセッサ | 2 GHz クアッドコアIntel Core i5 |
メモリ | 32 GB 3733 MHz LPDDR4 |
グラフィックス | Intel Iris Plus Graphics 1536 MB |
- ソフトウェア環境
項目 | 情報 | 備考 |
---|---|---|
PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う |
MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする |
問題までの経緯
-
モデルファイルを
アプリ名ディレクトリ/app
直下からアプリ名ディレクトリ/app/Models
直下に移動した。(Modelsディレクトリはmkdir
コマンドにて作成した。) -
Laravelアプリ名ディレクトリで下記コマンドを実行してtinkerを開いた。
$ php artisan tinker
-
下記を実行してuse宣言を行った。
use App\Models\モデルファイル名
-
下記を実行してidカラムが1のレコードのデータを取得しようとした。
$info = モデル名::find(1)
問題
- 下記のエラーが発生した。
PHP Fatal error: Cannot declare class App\モデルファイル名, because the name is already in use in /usr/share/nginx/html/Laravelアプリ名/app/Models/モデルファイル名.php on line 7
PHP Stack trace:
PHP 1. {main}() /usr/share/nginx/html/Laravelアプリ名/artisan:0
PHP 2. App\Console\Kernel->handle() /usr/share/nginx/html/Laravelアプリ名/artisan:37
PHP 3. Illuminate\Console\Application->run() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:131
PHP 4. Illuminate\Console\Application->run() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Console/Application.php:93
PHP 5. Illuminate\Console\Application->doRun() /usr/share/nginx/html/Laravelアプリ名/vendor/symfony/console/Application.php:147
PHP 6. Illuminate\Console\Application->doRunCommand() /usr/share/nginx/html/Laravelアプリ名/vendor/symfony/console/Application.php:271
PHP 7. Laravel\Tinker\Console\TinkerCommand->run() /usr/share/nginx/html/Laravelアプリ名/vendor/symfony/console/Application.php:1000
PHP 8. Laravel\Tinker\Console\TinkerCommand->run() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Console/Command.php:121
PHP 9. Laravel\Tinker\Console\TinkerCommand->execute() /usr/share/nginx/html/Laravelアプリ名/vendor/symfony/console/Command/Command.php:255
PHP 10. Illuminate\Foundation\Application->call() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Console/Command.php:134
PHP 11. Illuminate\Container\BoundMethod::call() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Container/Container.php:590
PHP 12. Illuminate\Container\BoundMethod::callBoundMethod() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:34
PHP 13. Illuminate\Container\Util::unwrapIfClosure() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:90
PHP 14. Illuminate\Container\BoundMethod::Illuminate\Container\{closure:/usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:30-34}() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Container/Util.php:37
PHP 15. call_user_func_array:{/usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32}() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32
PHP 16. Laravel\Tinker\Console\TinkerCommand->handle() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32
PHP 17. Psy\Shell->run() /usr/share/nginx/html/Laravelアプリ名/vendor/laravel/tinker/src/Console/TinkerCommand.php:78
PHP 18. Psy\Shell->run() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/Shell.php:316
PHP 19. Psy\Shell->doRun() /usr/share/nginx/html/Laravelアプリ名/vendor/symfony/console/Application.php:147
PHP 20. Psy\Shell->doInteractiveRun() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/Shell.php:341
PHP 21. Psy\ExecutionLoopClosure->execute() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/Shell.php:370
PHP 22. Psy\{closure:/usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/ExecutionLoopClosure.php:32-100}() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/ExecutionClosure.php:96
PHP 23. Psy\Shell->getInput() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/ExecutionLoopClosure.php:40
PHP 24. Psy\Shell->addCode() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/Shell.php:521
PHP 25. Psy\CodeCleaner->clean() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/Shell.php:829
PHP 26. PhpParser\NodeTraverser->traverse() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/CodeCleaner.php:227
PHP 27. PhpParser\NodeTraverser->traverseArray() /usr/share/nginx/html/Laravelアプリ名/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:91
PHP 28. PhpParser\NodeTraverser->traverseNode() /usr/share/nginx/html/Laravelアプリ名/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
PHP 29. PhpParser\NodeTraverser->traverseNode() /usr/share/nginx/html/Laravelアプリ名/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:146
PHP 30. Psy\CodeCleaner\ValidClassNamePass->leaveNode() /usr/share/nginx/html/Laravelアプリ名/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:153
PHP 31. Psy\CodeCleaner\ValidClassNamePass->validateStaticCallExpression() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php:93
PHP 32. Psy\CodeCleaner\ValidClassNamePass->ensureMethodExists() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php:180
PHP 33. Psy\CodeCleaner\ValidClassNamePass->ensureClassOrTraitExists() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php:271
PHP 34. Psy\CodeCleaner\ValidClassNamePass->traitExists() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php:255
PHP 35. trait_exists() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php:375
PHP 36. spl_autoload_call() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php:375
PHP 37. Composer\Autoload\ClassLoader->loadClass() /usr/share/nginx/html/Laravelアプリ名/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php:375
PHP 38. Composer\Autoload\includeFile() /usr/share/nginx/html/Laravelアプリ名/vendor/composer/ClassLoader.php:322
PHP 39. include() /usr/share/nginx/html/Laravelアプリ名/vendor/composer/ClassLoader.php:444
Symfony\Component\Debug\Exception\FatalErrorException : Cannot declare class App\モデルファイル名, because the name is already in use
at /usr/share/nginx/html/Laravelアプリ名/app/Models/モデルファイル名.php:7
3| namespace App;
4|
5| use Illuminate\Database\Eloquent\Model;
6|
> 7| class モデルファイル名 extends Model
8| {
9| //
10| }
11|
Exception trace:
1 Symfony\Component\Debug\Exception\FatalErrorException::__construct()
/usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:148
2 Illuminate\Foundation\Bootstrap\HandleExceptions::fatalExceptionFromError()
/usr/share/nginx/html/Laravelアプリ名/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:134
Please use the argument -v to see more details.
Whoops\Exception\ErrorException : Cannot declare class App\モデルファイル名, because the name is already in use
at /usr/share/nginx/html/Laravelアプリ名/app/Models/モデルファイル名.php:7
3| namespace App;
4|
5| use Illuminate\Database\Eloquent\Model;
6|
> 7| class モデルファイル名 extends Model
8| {
9| //
10| }
11|
Exception trace:
1 ()
/usr/share/nginx/html/Laravelアプリ名/vendor/composer/ClassLoader.php:444
2 Composer\Autoload\includeFile()
/usr/share/nginx/html/Laravelアプリ名/vendor/composer/ClassLoader.php:322
Please use the argument -v to see more details.
問題解決までの経緯
-
データの取得に使用するモデルファイルを確認した。下記にモデルファイルの内容を記載する。
アプリ名ディレクトリ/app/Models/モデルファイル.php<?php namespace App; use Illuminate\Database\Eloquent\Model; class モデルファイル名 extends Model { // }
-
モデルファイルの設置場所を変更したにもかかわらずモデルファイル内のnamespaceの記載を変更していなかった。
-
下記の様にモデルファイルを修正した。
アプリ名ディレクトリ/app/Models/モデルファイル.php<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class モデルファイル名 extends Model { // }
-
下記の手順を実施して正常にidが1のレコードのデータを取得できたことが確認できた。
-
Laravelアプリ名ディレクトリで下記コマンドを実行してtinkerを開く。
$ php artisan tinker
-
下記を実行してuse宣言を行う。
use App\Models\モデルファイル名
-
下記を実行してidカラムが1のレコードのデータを取得した。
$info = モデル名::find(1)
-