如何在Laravel 9项目中配置.env文件连接两个MySQL数据库
Laravel 9 配置双MySQL数据库连接
1. 在.env文件中添加第二个数据库的配置
直接在现有配置下方追加第二个数据库的参数,用区分性前缀避免和第一个数据库的配置冲突:
# 第一个数据库(stores) DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=stores DB_USERNAME=root DB_PASSWORD=**** # 第二个数据库(producers) DB_HOST_PRODUCERS=127.0.0.1 # 若和第一个数据库同主机则保留,不同则修改为对应IP DB_PORT_PRODUCERS=3306 DB_DATABASE_PRODUCERS=producers DB_USERNAME_PRODUCERS=root # 不同用户名则替换为实际值 DB_PASSWORD_PRODUCERS=****
2. 修改config/database.php配置文件
在connections数组中新增第二个数据库的连接配置,读取.env里刚添加的参数:
'connections' => [ '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'), ]) : [], ], // 新增第二个数据库连接(producers) 'mysql_producers' => [ 'driver' => 'mysql', 'url' => env('DATABASE_PRODUCERS_URL'), 'host' => env('DB_HOST_PRODUCERS', '127.0.0.1'), 'port' => env('DB_PORT_PRODUCERS', '3306'), 'database' => env('DB_DATABASE_PRODUCERS', 'forge'), 'username' => env('DB_USERNAME_PRODUCERS', 'forge'), 'password' => env('DB_PASSWORD_PRODUCERS', ''), 'unix_socket' => env('DB_SOCKET_PRODUCERS', ''), '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_PRODUCERS_ATTR_SSL_CA'), ]) : [], ], ],
3. 实际使用双数据库连接
- 模型绑定连接:如果某个模型对应producers数据库的表,直接在模型里指定连接:
class Producer extends Model { protected $connection = 'mysql_producers'; // 其他模型代码... }
- 手动指定连接查询:临时查询第二个数据库时,用
connection()方法切换:
// 查询producers数据库中的表数据 $producerData = DB::connection('mysql_producers')->table('producers_table')->get();
内容的提问来源于stack exchange,提问作者Mohit Nandpal
相关产品推荐
相关产品推荐

