どうも、えんつかです。
ローカル環境でのLaravelの環境構築法を以前まとめました。
今回は、DB接続方法、特にMySQLへの接続方法を記載します。
それでは、いってみましょう!
【Laravel】マイグレーションでデータベース接続の確認【ローカル】
LaravelでDB内のテーブルを作成する際は、マイグレーションが便利です。
マイグレーションは、データベースのバージョン管理機能です。
データベースのテーブルを生成したり削除したりする機能を持っており、PHPスクリプトを使ってテーブルの作成などを用意しておけます。
一度ファイルを作成しておけば、環境が変わった場合にコマンド一発でデータベースのテーブルを作成できますし、途中でテーブル構造を変えたい場合に、古いテーブルを削除して最新のテーブルに更新することも容易にできます。
ここでは、マイグレーションを上手く行えるかで、ローカル環境でDB接続が上手く行っているか確認したいと思います。
マイグレーションを行う為には、いくつか設定が必要なので順を追って記載していきます。
- MySQL内でDB作成
- configファイルの修正
- .envファイルの修正
MySQL内でDB作成
まずは、DBを作成しましょう。

赤枠内をクリックし、ページを開きます。

クリックすると、phpmyadminに飛びます。
日本語表示にしつつ、DBを作成していきましょう。
赤枠内からDB作成と日本語表示に変更できます。

データベース名を入力し、照合順序をutf8mb4_unicode_ciにしましょう。
ここでは、データベースを「todoapp」とします。
こちらの「todoapp」は後程、.envファイルを修正する際にも用います。
別のデータベース名にしたら、そのデータベース名を用いて下さい。
ひとまず、これにてOKです。
configファイルの修正
続いて、DB接続するための手続きとして、configファイルを修正していきましょう。
作成したプロジェクトファイル内の「config」フォルダを探して下さい。
configフォルダ内に「database.php」ファイルが準備されていますので、これを開きます。
このファイルは以下の記述がされています。(一部省略)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php use Illuminate\Support\Str; return[ 'default' => env('DB_CONNECTION', 'mysql'), 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DATABASE_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ], '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'), ]) : [], ], |
今回は、MySQLへの接続とするので、このままでOKです。
もし、SQLiteに接続する場合は、以下の記述を
1 |
'default' => env('DB_CONNECTION', 'mysql'), |
次のように変更です。
1 |
'default' => env('DB_CONNECTION', 'sqlite'), |
この、DB_CONNETCTIONの名前を変更することで使うデータベースを切り替えられます。
.envファイルの修正
これで、データベース設定は完了したのですが、Laravelの環境変数を設定する必要があります。
その為に続いて、.envファイルを修正していきましょう。
これは、基本的な動作環境に関する変数です。
.envファイルは、隠しファイル設定になっているので、隠しファイルが表示されるように設定しましょう。
.envファイルを開いたら、「DB_CONNECTION」と「DB_PORT」と「DB_DATABASE」という3つの項目を探して、以下のように修正して下さい。
1 2 3 |
DB_CONNECTION=mysql DB_PORT=8889 DB_DATABASE=todoapp |
「DB_CONNECTION」は、用いるsqlを記述します。
「DB_PORT」は、使用するポートを記述します。
こちらは、phpmyadminに接続した際に表示されている、ポートを用いて下さい。以下写真の赤枠内です。

「DB_DATABASE」には、使用するデータベース名を記載して下さい。
これにて、.envファイルの修正は完了です。
マイグレーションの実行
ここでは、マイグレーションファイルの作成は割愛し、デフォルトで存在しているファイルをtodoappにマイグレーションしていきます。
ターミナルを起動します。
以下のコマンドを入力して下さい。
php artisan migrate
Migration table created succesfullyと表示されれば、マイグレーション成功です。
phpmyadmin内のtodoappデータベースを確認して下さい。
テーブルがデータベース内に確認されれば、OKです。
php artisan migrateが上手くいかない場合
私は、php artisan migrateが上手くいかず、だいぶ凹みました。
同じ様に誰かが苦労しないようにする為に、私が遭遇したエラー対処を記載します。(というか、上記の様に進めるとエラーを回避して上手く行くはずです。)
主なエラー要因は以下の二つでした。
- キャッシュが残っていて変更が反映されていない
- .envの設定が正しくない
以下のエラーが出てきました。
エラー①
1 PDOException::(“SQLSTATE[HY000] [2002] Connection refused”)
/Applications/MAMP/htdocs/laravelapp/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
2 PDO::__construct(“mysql:host=127.0.0.1;port=3306;dbname=todoapp”, “root”, “”, [])
/Applications/MAMP/htdocs/laravelapp/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
エラー②
1 PDOException::(“SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: NO)”)
/Applications/MAMP/htdocs/laravelapp/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
2 PDO::__construct(“mysql:host=127.0.0.1;port=8889;dbname=todoapp”, “root”, “”, [])
Applications/MAMP/htdocs/laravelapp/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
どうやら、.envファイルが正しくなく、DB接続が上手くいっていない様でした。特に、DB_PORTは要注意です。
そして、正しく修正したのですが、修正内容が反映されておらず、上手くいっていない様でした。
色々調べているとキャッシュが残る様で、ターミナルでキャッシュをクリアする必要があるとのことでした。
以下のコマンドでキャッシュをクリアすることができます。
php artisan cache:clear
Application cache cleared!と表示されます。
続いて、次のコマンドです。
php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!
と表示されます。その後、再度php artisan migrateを行ってみて下さい。
以上です。
参考になれば幸いです。