dockerを使用してlaravelの環境構築を行った後、apiの作り込みをしていたら、表題のエラーで詰まり、解決するにかなりの時間を浪費しました。
初歩的なミスで恥ずかしい事ですが、備忘録して今回の修正方法を記録しておきます。
laravelのDB接続概要(簡易)
laravelでは、config/database.php に各種DBに接続する為、情報を記載する入力欄があると思います。
(基本的は、どの言語のフレームワークでも、同様の入力する欄があると思います)
'connections' => [
// 省略
'mysql' => [
'driver' => 'mysql',
'host' => env('MYSQL_HOST', '127.0.0.1'),
'port' => env('MYSQL_PORT', '3306'),
'database' => env('MYSQL_DATABASE', 'forge'),
'username' => env('MYSQL_ROOT_USER', 'forge'),
'password' => env('MYSQL_ROOT_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
// 省略
],
今回の問題点ですが、config/database.php に記載されているMySQLの環境変数と.env記載したMySQLの環境変数が異なっていた為、DBに接続できませんでした。
DB_CONNECTION=mysql
DB_HOST=test_db
DB_PORT=3306
DB_DATABASE=test_detabase
DB_ROOT_USER=test_root_user
DB_ROOT_PASSWORD=test_password
DB_CONNECTION=mysql
MYSQL_HOST=test_db
MYSQL_PORT=3306
MYSQL_DATABASE=test_detabase
MYSQL_ROOT_USER=test_root_user
MYSQL_ROOT_PASSWORD=test_password
環境変数名が間違っていた為、laravelの仕様上、 下記に記載したenv関数の第二引数を読み込む為、DBが接続できず、エラーを吐き続けると言う状態に陥りました。
'host' => env('MYSQL_HOST', '127.0.0.1' ← この値を使用する )
環境変数を合わせた事で、無事にDBに接続でき、開発を進める事ができました。
参考文献
感想
今回、laravelを使用した開発を初めて行いましたが、新しいフレームワークを使って開発すると初歩的な部分でハマる事が多いなと実感しました。
公式ドキュメントをしっかり読み込んで開発する必要性があるなと、改めて痛感しました。