SQLSTATE[42S02]: Base table or view not found:の対処法
Laravel12.1.1でプロジェクト作成→php artisan migrate
をしたら、以下のエラーが発生しました。
ベーステーブルまたはビューが見つかりません: 1146 テーブル 'laravel.sessions' が存在しませんとエラーが発生しているようです。
.envのSESSION_DRIVERを変えるだけで解決
SESSION_DRIVER=database
をSESSION_DRIVER=file
に変えるだけでエラーが解消できます。
エラーの原因は、SESSION_DRIVER=database
を指定しているのにデータベースにsessionsテーブルが存在していなかったためでした。
ないものを指定しているので、エラーになって当然でした…
SESSION_DRIVER=file
にすると、Laravelはsessionsテーブルを探すのをやめます。代わりに/storage/framework/sessions
にセッションを保存します。
Laravel11から、セッションのデフォルト設定がfile
からdatabase
に変わったので、古い教本を参考に学習されている方は気をつけてください。
そもそもセッションとは
セッションをファイルに保存するようになり、エラーが解決できたのはいいのですがそもそも「セッション」とはなんなのかわからなかったので深掘りしました。
セッションのおかげ!ありがたい仕組み
ふだんAmazonでお買い物をする時、ログインしたままページを移動してもログアウトされることはないですよね。カートの中身も、ページ移動したら勝手にカートの中身が消えた・数量が変更されたってこともありません。
これらの機能はセッションがいるからこそ成り立っています。
もしセッションがなかったら、ページを移動するたびにログインしなければなりません、カートの中身も勝手に消えたら買い物しづらいです。
このようにセッションは「ユーザーがウェブサイトとやりとりした一連の行動(情報)」を保存する仕組みで、快適なお買い物環境の構築に役立っています。
大切な行動(情報)データをどこに保存しようか…データベース?ファイル?と指定するのが、先ほどのSESSION_DRIVER=database
とSESSION_DRIVER=file
です。
データベースとファイルのメリット・デメリット
どっちにセッションを保存しても同じなのでは!?と思いましたが、それぞれにメリット・デメリットがあり使い分けができます。
データベースのメリット
- 複数のサーバーにアプリケーションがまたがっていても、サーバーをまたがってセッションを保存できる
- 長期保存に向いている。サーバーを再起動してもセッションは消えない
- バックアップがとれる
データベースのデメリット
- アクセス頻度が高いと、データベースに負荷がかかる
- データベースの管理が必要
ファイルのメリット
- データベースよりも速くセッションを書き込める
- 設定が簡単。データベースのようにテーブルを作る必要なし
- サーバーのセットアップも、データベースと比べると簡単・軽量
ファイルのデメリット
- サーバーをまたがったセッション保存はできない
-
storage/framework/sessions
にデータが増えると、管理が手間・容量を食う
Laravelのエラー解消のおかげでセッションについての知識がつきました。
Discussion