🛒

SQLSTATE[42S02]: Base table or view not found:の対処法

2025/03/10に公開

Laravel12.1.1でプロジェクト作成→php artisan migrateをしたら、以下のエラーが発生しました。

ベーステーブルまたはビューが見つかりません: 1146 テーブル 'laravel.sessions' が存在しませんとエラーが発生しているようです。

.envのSESSION_DRIVERを変えるだけで解決

SESSION_DRIVER=databaseSESSION_DRIVER=fileに変えるだけでエラーが解消できます。

エラーの原因は、SESSION_DRIVER=databaseを指定しているのにデータベースにsessionsテーブルが存在していなかったためでした。
ないものを指定しているので、エラーになって当然でした…

SESSION_DRIVER=fileにすると、Laravelはsessionsテーブルを探すのをやめます。代わりに/storage/framework/sessionsにセッションを保存します。

Laravel11から、セッションのデフォルト設定がfileからdatabaseに変わったので、古い教本を参考に学習されている方は気をつけてください。

そもそもセッションとは

セッションをファイルに保存するようになり、エラーが解決できたのはいいのですがそもそも「セッション」とはなんなのかわからなかったので深掘りしました。

セッションのおかげ!ありがたい仕組み

ふだんAmazonでお買い物をする時、ログインしたままページを移動してもログアウトされることはないですよね。カートの中身も、ページ移動したら勝手にカートの中身が消えた・数量が変更されたってこともありません。
これらの機能はセッションがいるからこそ成り立っています。

もしセッションがなかったら、ページを移動するたびにログインしなければなりません、カートの中身も勝手に消えたら買い物しづらいです。

このようにセッションは「ユーザーがウェブサイトとやりとりした一連の行動(情報)」を保存する仕組みで、快適なお買い物環境の構築に役立っています。

大切な行動(情報)データをどこに保存しようか…データベース?ファイル?と指定するのが、先ほどのSESSION_DRIVER=databaseSESSION_DRIVER=fileです。

データベースとファイルのメリット・デメリット

どっちにセッションを保存しても同じなのでは!?と思いましたが、それぞれにメリット・デメリットがあり使い分けができます。

データベースのメリット

  1. 複数のサーバーにアプリケーションがまたがっていても、サーバーをまたがってセッションを保存できる
  2. 長期保存に向いている。サーバーを再起動してもセッションは消えない
  3. バックアップがとれる

データベースのデメリット

  1. アクセス頻度が高いと、データベースに負荷がかかる
  2. データベースの管理が必要

ファイルのメリット

  1. データベースよりも速くセッションを書き込める
  2. 設定が簡単。データベースのようにテーブルを作る必要なし
  3. サーバーのセットアップも、データベースと比べると簡単・軽量

ファイルのデメリット

  1. サーバーをまたがったセッション保存はできない
  2. storage/framework/sessionsにデータが増えると、管理が手間・容量を食う

Laravelのエラー解消のおかげでセッションについての知識がつきました。

Discussion