僕がPHPフレームワークにLaravelを使ってます。
便利な反面、設定に手こずることも度々です。
今回遭遇したのは次の問題
「データベース設定が上手くできない!」
この設定方法が分からなかったので、
LaravelでのDB設定の正しい手順をメモしておきます。
このページの目次
1.まず.envファイルからデータベース設定変更
この.envファイルは以下のパスにあります。
▼ このパスにある(適宜読み替え)
1 |
【Laravelインストール先】/.env |
このファイルは後述のdatabase.phpにおけるデフォルトのデータベース接続情報を保有しているファイルです。(データベースのみでなく、Laravelの環境変数の設定用)
そして以下のような部分を探してみてください。
▼ このようなデータベース設定があるはず
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD= |
なんかデフォルト設定が書いてあります。当然これだとデータベースに接続できないので、例えば以下のように正しいデータベース接続情報に変更します。
▼ このように変更修正
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=【データベース名】 DB_USERNAME=【DBユーザー名】 DB_PASSWORD=【DBパスワード】 |
正直言って、この.envファイルでのDB設定はあまり重要ではありません。次に紹介するdatabase.phpの設定の方が柔軟に対応できます。
この .env ファイルはデータベースのみならず、全てのLaravel設定の起点になります。この設定が肝心なので忘れてはいけません。
2.次にdatabase.phpでデータベース接続情報を設定
お次はdatabase.phpを開いてください。
▼ こちらのパスにあるファイル
1 |
[Laravelインストール先]/config/database.php |
このファイルは文字通りデータベースに関するアレコレ(主にDB接続情報)を設定変更できるファイルです。開くと色々書いてあります。
その中で次の部分がmysql接続情報です。
▼ デフォルトだと次の内容になってる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), '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'), ]) : [], ], |
ここを正しいデータベース接続情報に変更します。
▼ このように変更修正する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', '【DB名】'), 'username' => env('DB_USERNAME', '【DBユーザー名】'), 'password' => env('DB_PASSWORD', '【DBパスワード】'), 'unix_socket' => env('DB_SOCKET', ''), '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'), ]) : [], ], |
絶対に変更すべき箇所は次の3つ
- DB_DATABASE
- DB_USERNAME
- DB_PASSWORD
それから 'collation' => 'utf8mb4_unicode_ci' という部分がありますが、これが照合順序です。こちらもデータベースの照合順序に変更してください。
あとは多分変更しなくてOK。そのままで大丈夫です。
最後にデータベース設定をmigrateする
最後に次のようなコマンドを実行
1 |
php artisan migrate |
これで次のような表示になれば成功です。
1 2 3 4 5 6 7 |
Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (22.94ms) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (23.76ms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (21.22ms) |
ちなみに僕の環境での表示例なので参考までに・・・とりあえず succefully と出ていれば成功です。(エラーが出ていなければOK)
もし migrateでエラーが出るならキャッシュ削除
この時エラーが出ることがあります。
▼ 例えばこういう感じのエラー
1 2 3 4 5 |
C:\xampp\htdocs\example.com\laravel\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70 PDOException::("SQLSTATE[HY000] [2002] 対象のコンピューターによって拒否されたため、接続できませんでし た。") C:\xampp\htdocs\example.com\laravel\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70 PDO::__construct("mysql:host=127.0.0.1;port=;dbname=hogehoge", "root", "mypassword", []) |
そういう場合は次のコマンドを実行してください。
▼ 設定キャッシュを削除
1 |
php artisan config:cache |
▼ キャッシュも削除
1 |
php artisan cache:clear |
これで再び php artisan migrate してみると上手くいくこともあります。もちろんデータベース接続情報が間違っていないかの確認もお忘れなく・・・