kuro

1 minute read

Laravelでデータベースへの接続を確認する

Laravelでmigrateする際に問題にぶつかったのでメモしておきます。

php artisan migrate

このコマンドでデータベースにうまくテーブルが作られていませんでした。
しかしどこにもエラーメッセージは見当たりません。

もう一度migrateしても

Nothing to migrate.

と表示されました。

疑うべきは.envファイルの設定が間違っていることか?
しかしプロジェクト内の.envは目的のexampleデータベースに設定されており正しかったです。

接続がもしかして切れているのかと思い、以下のコードを書いて確認しました。
とりあえずどこでもよかったので、route/web.phpに書きました。

Route::get('/', function () {
    try {
    DB::connection()->getPdo();
    if(DB::connection()->getDatabaseName())
    {
        echo "conncted sucessfully to database ".DB::connection()->getDatabaseName();
    }
} catch (\Exception $e) {
    die("Could not connect to the database.  Please check your configuration. error:" . $e );
}
    // return view('index');
});

以下のコマンドを入力後、localhost:8000で確認すると、

php artisan serve

なんと別のデータベースへ接続されていました( ゚Д゚)
キャッシュが問題かと思い以下のコマンドを入力。

php artisan config:clear
php artisan config:cache

結果は変わらず。

しかし、このキャッシュの場所bootstrap/cache/config.phpを確認すると、確かにexampleデータベースではなく、別のデータベースに接続する設定になっていました。
このconfig.phpを直接書き換えてmigrateすると正しくmigrate出来ました。

キャッシュの生成で間違いが起きていることが分かったので、もしかしたら別の.envファイルを読み込んでいるのか?と思いdocker-compose.ymlを確認すると…

env_file:
      - .env

ここで別の.envファイルを読み込んでいました( ゚Д゚)
このファイルは不要だったので削除しました。

これでもう一度ブラウザで確認すると正しいデータベースに接続されており、migrateも期待通り出来ました。

docker-compose down
docker-compose up -d
docker-compose exec php php example_app/artisan config:clear
docker-compose exec php php example_app/artisan config:cache
docker-compose exec php php example_app/artisan migrate
docker-compose exec php php example_app/artisan serve --host 0.0.0.0

VagrantとDockerを使用してLaravelを使っていたので起きた問題でした。(´∀`)