欢迎光临南昌笑劳网络科技有限公司,我们是一家专注中小型企业营销推广服务的公司!

咨询热线:400 76543 55
南昌笑劳网络科技有限公司
最新资讯News
南昌笑劳网络科技有限公司

Laravel如何连接多个数据库?(多库配置教程)

作者:穿越時空 | 点击: | 来源:穿越時空
0801
2026
Laravel支持多数据库连接,需在.env中配置各库环境变量,并在config/database.php中注册对应连接名;模型通过$connection属性指定使用哪个连接。...
Laravel 支持多数据库连接,需在 .env 中配置各库环境变量,并在 config/database.php 中注册对应连接名;模型通过 $connection 属性指定使用哪个连接。

在 Laravel 中连接多个数据库并不复杂,关键是正确配置多个数据库连接,并在模型或查询时明确指定使用哪一个。

一、配置多个数据库连接

打开 .env 文件,为每个数据库定义独立的环境变量:

# 默认数据库(mysql)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=main_db
DB_USERNAME=root
DB_PASSWORD=

第二个数据库(比如日志库)

LOG_DB_CONNECTION=mysql LOG_DB_HOST=127.0.0.1 LOG_DB_PORT=3306 LOG_DB_DATABASE=log_db LOG_DB_USERNAME=root LOG_DB_PASSWORD=

第三个数据库(比如报表库,可选 PostgreSQL)

REPORT_DB_CONNECTION=pgsql REPORT_DB_HOST=127.0.0.1 REPORT_DB_PORT=5432 REPORT_DB_DATABASE=report_db REPORT_DB_USERNAME=postgres REPORT_DB_PASSWORD=

接着在 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', ''),
    // ...其他选项(charset, collation 等)
],

'log_mysql' => [ 'driver' => 'mysql', 'host' => env('LOG_DB_HOST', '127.0.0.1'), 'port' => env('LOG_DB_PORT', '3306'), 'database' => env('LOG_DB_DATABASE', 'forge'), 'username' => env('LOG_DB_USERNAME', 'forge'), 'password' => env('LOG_DB_PASSWORD', ''), // 注意:不加 'url' 字段,避免覆盖 ],

'report_pgsql' => [ 'driver' => 'pgsql', 'host' => env('REPORT_DB_HOST', '127.0.0.1'), 'port' => env('REPORT_DB_PORT', '5432'), 'database' => env('REPORT_DB_DATABASE', 'forge'), 'username' => env('REPORT_DB_USERNAME', 'forge'), 'password' => env('REPORT_DB_PASSWORD', ''), ],

二、在模型中指定数据库连接

每个 Eloquent 模型可通过 $connection 属性绑定特定连接:

  • 主业务模型(用默认连接)无需设置
  • 日志模型 显式指定:protected $connection = 'log_mysql';
  • 报表模型 支持跨类型:protected $connection = 'report_pgsql';

示例:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class UserLog extends Model { protected $connection = 'log_mysql'; // 对应 config/database.php 中的键名 protected $table = 'user_logs'; }

三、运行时动态切换连接

不依赖模型时,可用 DB 门面手动指定连接:

  • DB::connection('log_mysql')->table('user_logs')->get();
  • DB::connection('report_pgsql')->select('SELECT * FROM sales_summary');
  • 事务也支持多库:DB::connection('log_mysql')->transaction(function () { ... });

注意:跨库事务无法保证原子性(尤其异构数据库),建议业务层做补偿或分步提交。

四、验证与调试技巧

快速确认连接是否生效:

  • php artisan tinker 手动测试:DB::connection('log_mysql')->getPdo(); 不报错即通
  • 查看当前连接:DB::connection()->getDatabaseName()
  • 开启查询日志:DB::connection('log_mysql')->enableQueryLog(); 再执行查询后用 DB::connection('log_mysql')->getQueryLog() 查看

基本上就这些。多库不是黑魔法,核心是配置清晰、调用明确、边界清楚。


# mysql  # 多个  # 并在  # 第二个  # 可选  # 报错  # 可通过  # 不加  # 绑定  # 不依赖  # 数据库  # database  # php  # word  # laravel  # ai  # 环境变量  # select  # protected  # function  # table  # 异构 

我要咨询做网站
成功案例
建站流程
  • 网站需
    求分析
  • 网站策
    划方案
  • 页面风
    格设计
  • 程序设
    计研发
  • 资料录
    入优化
  • 确认交
    付使用
  • 后续跟
    踪服务
  • 400 76543 55
    sale#ncxiaolao.cn
Hi,Are you ready?
准备好开始了吗?
那就与我们取得联系吧

咨询送礼现在提交,将获得笑劳科技策划专家免费为您制作
价值5880元《全网营销方案+优化视频教程》一份!
下单送礼感恩七周年,新老用户下单即送创业型空间+域名等大礼
24小时免费咨询热线400 76543 55
合作意向表
您需要的服务
您最关注的地方
预算

直接咨询