LoginSignup
13
10

More than 5 years have passed since last update.

書籍「PHPフレームワーク Laravel 入門」の誤り修正

Last updated at Posted at 2018-09-23

1. SQLite の設定でエラーが発生(P182あたり)

本の通りに進めると
Database (database/database.sqlite) does not exist. (SQL: select * from people)
というエラーが出る。書籍サポートサイトにこの箇所の修正が載っておりこう書いてある。

【誤】 DB_DATABASE=database.sqLite
【正】 DB_DATABASE=……database.sqliteのパスを指定……

今の版は DB_DATABASE=database/database.sqlite と修正済になっているのだが、それでも同じエラーが出る。

解決方法

SQLite 選択時は、設定ファイル .env から "他のDBでは使うが SQLite では不要な設定"をコメントアウトする。

# 修正前
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database/database.sqlite
DB_USERNAME=homestead
DB_PASSWORD=secret
# 修正後
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=database/database.sqlite
# DB_USERNAME=homestead
# DB_PASSWORD=secret

SQLite のデータベースファイルは、config/database.php で指定しており、DB_DATABASE をコメントアウトしても問題ない。('database' => env('DB_DATABASE', database_path('database.sqlite')), // 環境設定の DB_DATABASE が未設定なら database/database.sqlite を設定)

他の解決方法(非推奨)

  • database.php の上記で説明している箇所を 'database' => database_path('database.sqlite'), に変更すればエラーは消える。しかし、後々他のデータベースに変える可能性があることを考慮すると… 却下
  • teratail に DB_DATABASE は絶対パスで指定すれば動く という情報もあったが、環境で絶対パスが変わると書き換えなければならなし、サーバーと同期させる際、.env を対象から外す設定が必要になったりと複雑になって良くない… 却下

参考記事


2. シーディングを実行するとエラー(P223, P286)

本の通りに進めると以下のエラーが発生しシーディングできなかった。
ReflectionException : Class PeopleTableSeeder does not exist

解決方法は composer dump-autoload するだけ。
(仮想マシンにログインし cd code/laravelapp/、プロジェクトディレクトリに移動した状態でコマンド)
公式ドキュメントにも書いてある。

エラーの原因は、クラスが autoload されないため。
オートロードするファイルが配列でセットされているファイル(プロジェクトルート/vendor/composer/autoload_classmap.php)を上記のコマンドで更新すること解決できる。

参考記事:Laravelで名前空間を指定してオートロードされなかったら見る場所。 - Qiita


3. よくわからないパーミッションエラー (P290)

本の通りに進めると以下のエラーが発生。
There is no existing directory at "/Users/ユーザー名/code/laravelapp/storage/logs" and its not buildable: Permission denied

キャッシュクリアで解決した。
下に3つ書いたが、いずれかひとつで良いはず。

php artisan cache:clear
php artisan route:clear
php artisan config:clear


4. ルーティング設定の記載忘れ?(P324)

独自にログイン処理を実装するサンプルで、ルーティング設定が飛ばされていた。
何回も出てるパターンなので端折ってあるのかも。
web.php に以下を付け足す

Route::get('hello/auth', 'HelloController@getAuth');
Route::post('hello/auth', 'HelloController@postAuth');
13
10
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
13
10