こなさんち

しがないフリーランスエンジニアの備忘録。

PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA') でつまづいた件。in Laravel 5.8

経緯

Hyper-Vにて開発環境を作っていたときに、Laravel5.8を入れたら表題のエラー。

参考URL

codeday.me

結果

5.8は5.8でも config/database.php の内容異なる説。真偽は不明。

詳細

参考URL見てもらえばわかるんですが、そのサイトでは

<?php

// config/database.php 中略

'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' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => array_filter([
             PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]),

mysql['options']コメントアウトすればOKだよって書いてあるんです。 でも、今まで一度もそんなことしたことながなかったので、仮想環境ではなく、ローカル端末に落ちてる Laravel 5.8 の 同じ設定ファイル見たんですね。その内容が以下。

<?php

// config/database.php 中略


'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['options'] の内容が、拡張も加味してくれてるんですよ。こっちが正しい気がするのは私だけですかね…。

ということで、ローカルを反映し、完了でした。