0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP備忘録:Docker環境のLaravelでMySQLが空白…原因はSQLite接続だった

Posted at

はじめに

LaravelをDocker上に構築し、マイグレーション処理を試みた際、MySQLにテーブルが作成されない問題に遭遇しました。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

本記事はその原因と解決までの過程をまとめた、PHP学習初心者の備忘録です。

書こうと思ったきっかけ

個人的にPHPのキャッチアップをしたくてDocker + Laravel環境を構築中、artisan migrate は成功しているのに MySQL の中にテーブルが見えないという現象に悩まされました。

実際の事象

Screenshot 2025-05-05 at 14.35.56.png

調べてわかったことを整理して残しておきたいと思い、この記事を書きました。

内容

問題の現象

  • php artisan migrate は成功した(messages テーブルも Ran 表示)。
  • しかし mysql にログインして SHOW TABLES; を実行すると空。

原因の特定

  1. .env の中身を確認したところ、以下のように DB_CONNECTION=sqlite になっていた:
DB_CONNECTION=sqlite
  1. Laravel はこの設定をもとに SQLite にマイグレーションしていた

正しい設定への修正

.env を以下のように修正:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret

さらに、設定変更を反映させるために以下を実行:

make cache-clear
make migrate:fresh

実際のMakefile

# Laravelのキャッシュをすべてクリアする
cache-clear:
	docker exec -it php-app php artisan config:clear
	docker exec -it php-app php artisan route:clear
	docker exec -it php-app php artisan view:clear

# マイグレーションを実行する
migrate:
	docker compose exec php-app php artisan migrate

# 指定テーブルが存在するかを確認する(true が返ればOK)
check-table:
	docker compose exec php-app php artisan tinker --execute="\Schema::hasTable('messages');"

その後、MySQLに入り直して SHOW TABLES; を実行すると messages テーブルを含む一覧が正しく表示されました。

実際の画面

Screenshot 2025-05-05 at 14.37.38.png

まとめ

Laravelが使用するデータベースは .env ファイルで決まるため、Dockerなどの仮想環境下で構築する際は .envDB_HOSTDB_CONNECTION の設定に特に注意が必要です。

今回は sqlite になっていたために、MySQLにテーブルが現れないという状態でした。

今後は環境構築直後に .env を確認し、Laravelと接続するDBが意図したものになっているかをチェックするようにします...!

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?