【Laravel Sail】セッションテーブルが見つからないエラーの原因と対処法

Laravel Sailプロジェクトで「SQLSTATE[42S02]: Base table or view not found」エラーが発生する理由と解決方法

環境: Laravel v11.20.0 (PHP v8.3.10)

エラーの概要

Laravel Sailを使用して新規にインストールしたプロジェクトを起動した際、以下のようなエラーメッセージが表示されることがあります。

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.sessions' doesn't exist (Connection: mysql, SQL: select * from `sessions` where `id` = uzE7kGoRqN0sUTVG6QIdRtjn7X53QLwwOPlKWYwO limit 1)

エラーの原因

このエラーは、Laravelがセッションを保存するために必要な sessions テーブルがデータベースに存在しないために発生します。Laravel 11.xでは、セッションドライバーのデフォルト設定が database になっている可能性があり、このテーブルが存在しないとエラーが発生します。

解決方法

1. Laravel Sailでコンテナを起動する

まず、Laravel Sailを使用してコンテナを起動します。以下のコマンドを実行してください。

./vendor/bin/sail up -d

これでコンテナがバックグラウンドで起動します。

2. セッションテーブルのマイグレーションを実行する

次に、以下のコマンドを実行して、sessions テーブルをデータベースに作成します。Laravelにはデフォルトでセッションテーブルを作成するためのマイグレーションファイルが含まれているため、特別なファイル作成の必要はありません。

./vendor/bin/sail artisan migrate

これにより、Laravelが必要とするテーブルが作成され、エラーが解消されます。

3. セッションの保存方法を変更する(オプション)

データベースではなくファイルにセッションを保存するように設定を変更することも可能です。その場合は、.env ファイルで SESSION_DRIVERfile に設定します。

SESSION_DRIVER=file

この設定を行うと、セッションデータは storage/framework/sessions ディレクトリ内に保存されるようになります。

まとめ

Laravel 11.xでは、セッションドライバーのデフォルト設定が database になっている可能性があり、セッションテーブルが存在しないとエラーが発生します。このエラーを解消するには、sail artisan migrate を実行してセッションテーブルを作成するか、セッションの保存方法を file に変更することで対応できます。

Follow me!