Laravel 5.7 でデータベースが使えるように設定する

メモ:  Category:blog

Laravel 5.7 でデータベースを使えるようにするには、 config/database.php と .env が関係しています。 ここでは、 config/database.php と .env についてみていきます。

MySQL への接続設定

データベースへのアクセス設定は、 Laravel プロジェクトのルートにある .env ファイルに行います。

開発環境・テスト環境・本番環境など、それぞれ異なる環境を用意したい場合 .env.develop , .env.staging , .env.production などそれぞれの環境ファイルを用意し切り替えて使うことができます。

Laravel のドキュメントにある「データベースの準備」では、「データベース設定ファイルは config/database.php です。」とあります。

大元の設定は、 config/database.php になっており環境に応じて切り替えを可能にするため .env の設定で config/database.php の設定を上書きします。

※ Laravel のドキュメントには、 .env はソース管理に含めないことがガイドラインとして書いてあります。

それでは、実際に設定を行っていきます。 mysql のユーザーとデータベースを作成します。

# mysql -uroot -p
Enter password:
mysql> CREATE DATABASE `laravel` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql> GRANT ALL ON laravel.* TO user1@localhost IDENTIFIED BY 'passwd';

データベースの準備ができたので、 .env へDBに関する設定を行います。DB_で始まる部分がデータベースに関する設定になるので作成したデータベースに合わせて設定を行います。

接続するデータベースシステムを変更したい場合は、DB_CONNECTIONを変更します。例えば、PostgreSQLへ変更したい場合は、DB_CONNECTION=pgsqlへ変更しその他の項目も適宜変更します。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=user1
DB_PASSWORD=passwd

charset や prefix など細かな設定は、 config/database.php で行います。( env() を使って切り替え可能にしてもよい。[例:‘prefix’ => ‘env(‘DB_PREFIX’,'')'])

    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            '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' => '',
            'strict' => true,
            'engine' => null,
        ],

env() の部分が .env に設定した値への置換処理になっています。

env 関数は、ヘルパに用意されたもので getenv() を呼び出し環境変数(スーパーグローバル)から値を取得します。 .env で定義した設定は、 DotEnv ライブラリでスーパーグローバルにセットされるので、ヘルパーを通じて .env の設定を反映することができます。

bluenote by BBB