◀ 18.

【Laravelエラー】Database hosts array is empty.

▶
この記事の要点
  • Laravel の Database hosts array is empty
  • 原因: 有効な接続設定のhost配列が空。null・read/write側の設定や設定キャッシュも確認
  • 対処: 実際のDBホストを設定し、有効なconfigを確認。設定キャッシュの更新は環境のデプロイ手順に従う
  • config/database.php 側の env('DB_HOST') 参照が正しいか確認

 

エラー内容

Database hosts array is empty.

 

発生条件/原因/対処法

LaravelのConnectionFactoryはhostを配列化し、その配列が空ならこの例外を出します。現行実装ではhostがnullまたは空配列なら再現しますが、空文字列は1要素の配列になるため、この例外の直接条件とは異なります。認証失敗や接続拒否とも区別します。

configディレクトリのdatabase.phpのhostの項目に誤りがないか要確認。.envの値も確認すべし。

        'mysql' => [
            'driver' => 'mysql',

            'host' => env('DB_HOST'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE'),
            'username' => env('DB_USERNAME'),
            'password' => env('DB_PASSWORD'),
            'unix_socket' => env('DB_SOCKET'),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

 

どの接続設定が使われているか確認する

学習用環境のtinkerで、まずデフォルト接続名とhostだけを確認します。passwordや接続URL全体をログ・質問サイトへ貼らないでください。mysql以外がデフォルトなら、その接続名へ読み替えます。

php artisan tinker
config('database.default');
config('database.connections.mysql.host');
config('database.connections.mysql.read.host');
config('database.connections.mysql.write.host');
値・状況確認すること
null / []env参照、host配列を組み立てる処理、read/writeの上書き
空文字列この例外とは別でも接続先として適切か確認
想定と違うhostデフォルト接続、接続URL、設定キャッシュ
Docker内の127.0.0.1そのコンテナ自身を指す。別コンテナのDBなら実際のサービス名等を使う

設定変更後の注意

開発環境と本番を分けます。設定キャッシュがある環境では.envを直すだけで有効な設定が変わるとは限りません。本番は正式なデプロイ手順で設定キャッシュを再生成し、変更後のhostだけを再確認してください。config:clearだけで本番の作業を終えないでください。

hostを設定してこの例外が消えても、DNS・ポート・DBユーザー権限・PDOドライバが正常とは限りません。次に出る例外を読み、マイグレーションやDB作り直しで接続エラーを隠そうとしないでください。

公式資料: ConnectionFactoryのparseHosts、Laravelの設定キャッシュ(2026年10月確認)。

子ページ

子ページはありません

同階層のページ
  1. SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost'
  2. Add [~] to fillable property to allow mass assignment on [App\~].
  3. PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in ~
  4. Changing columns for table "~" requires Doctrine DBAL; install "doctrine/dbal"
  5. MethodNotAllowedHttpException No message
  6. Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found
  7. production.ERROR: No application encryption key has been specified.
  8. Dotenv values containing spaces must be surrounded by quotes.
  9. Laravel \ Socialite \ Two \ InvalidStateException
  10. The page has expired due to inactivity. Please refresh and try again.
  11. Failed to clone https://github.com/symfony/thanks.git via https, ssh protocol
  12. Illegal offset type
  13. Cannot access protected property Illuminate\Http\Request::$...
  14. Emitted value instead of an instance of Error
  15. 画像保存時にInternal Server Error
  16. Failed to authenticate on SMTP server with username ...
  17. PostTooLargeException
  18. Database hosts array is empty.
  19. Invalid request (Unsupported SSL request)
  20. does not comply with psr-4 autoloading standard. Skipping.
  21. MySQLのSTR_TO_DATE関数を使用するとnullが返却される問題