laravel 8–11 多数据库需显式配置与调用,核心是 config/database.php 注册连接、.env 独立前缀隔离、模型或 db::connection() 显式指定;验证用 tinker 测试连接、查询日志及带 --database 的迁移。

在 Laravel 8 到 11 中,多数据库连接不是自动启用的,必须显式配置、显式调用才生效。没有“查看连接列表”的内置命令,但可通过组合方式验证配置是否加载、连接是否可达、路由是否正确。管理重点在于配置结构清晰、环境变量隔离、调用方式明确。
确认 config/database.php 中已注册所有连接
打开 config/database.php,检查 'connections' 数组是否包含你定义的全部命名连接(如 mysql_analytics、pgsql_reporting),每个连接需满足:
- 键名唯一,且不覆盖默认的
mysql连接(它被迁移、通知、队列等内部功能依赖) - 完整声明
driver、host、database、username、password、charset、collation等字段 - 所有敏感字段必须用
env()加载,例如'host' => env('DB_ANALYTICS_HOST', '127.0.0.1') - 若使用 PostgreSQL,确保
'driver' => 'pgsql'且 PHP 已启用pdo_pgsql扩展
验证 .env 中环境变量前缀是否语义化且无冲突
检查 .env 文件中是否为每个库使用独立前缀(如 DB_ANALYTICS_*、DB_LEGACY_*),避免复用 DB_HOST 等通用变量导致多个连接指向同一地址:
- 必须至少定义:
DB_XYZ_HOST、DB_XYZ_PORT、DB_XYZ_DATABASE、DB_XYZ_USERNAME、DB_XYZ_PASSWORD - 若驱动非 mysql,还需
DB_XYZ_DRIVER=pgsql,并在config/database.php中保持一致 - 修改
.env后务必运行php artisan config:clear,否则缓存不会更新
检查模型或查询中是否正确指定连接
连接配置只是“注册”,真正生效靠代码调用。两种主流方式需对应验证:
-
模型静态绑定:在模型类顶部写
protected $connection = 'mysql_analytics';,值必须与config/database.php中的键名完全一致(大小写、下划线均敏感);同时建议设置protected $table = 'analytics_events';避免查错表 -
动态切换:使用
DB::connection('mysql_legacy')->table('logs')->first()或AnalyticsEvent::on('mysql_legacy')->first();注意on()仅对 Eloquent 查询有效,原生 DB 查询需用DB::connection()
快速诊断连接是否生效的方法
无需第三方工具,用 Laravel 自带能力即可定位问题:
- 在 Tinker 中执行
DB::connection('mysql_analytics')->getPdo();—— 若抛出异常,说明连接参数错误或网络不通 - 开启查询日志:
DB::connection('mysql_analytics')->enableQueryLog();,再执行查询后用DB::connection('mysql_analytics')->getQueryLog()查看实际发送的 SQL 和目标库 - 运行迁移时必须加
--database=mysql_analytics参数,否则默认走mysql连接;Seeder 同理 - 事务不跨连接:
DB::connection('a')->transaction()内调用DB::connection('b')的操作不在事务保护内,需自行设计最终一致性方案











