Laravel 配置连接多个数据库以及如何使用

配置连接#

配置 .env 文件#

Copy Highlighter-hljs
/* 这部分是默认的数据库设置 */ DB_CONNECTION=mysql DB_HOST=xxx.xxx.xxx.xxx DB_PORT=3306 DB_DATABASE=default_db_name DB_USERNAME=default_username DB_PASSWORD=default_password /* 这部分是新增的数据库设置 */ DB_HOST_NEW=xxx.xxx.xxx.xx DB_PORT_NEW=3306 DB_DATABASE_NEW=new_db_name DB_USERNAME_NEW=new_db_username DB_PASSWORD_NEW=new_db_password

配置 \config\database.php 文件#

Copy Highlighter-hljs
/* 这是默认的设置 */ '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' => '', 'strict' => true, 'engine' => null, ], /* 这是需要新增加的设置内容,使用 .env 新增的内容 */ 'mysql_new' => [ 'driver' => 'mysql', 'host' => env('DB_HOST_NEW', 'localhost'), 'port' => env('DB_PORT_NEW', '3306'), 'database' => env('DB_DATABASE_NEW', 'forge'), 'username' => env('DB_USERNAME_NEW', 'forge'), 'password' => env('DB_PASSWORD_NEW', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ],

使用#

Schema#

在各种 Schema Builder 中使用,可以使用 Schema facade 类来连接任意想要连接的数据库,只需要使用 connection() 方法即可,如 migration 文件中应用:

Copy Highlighter-hljs
Schema::connection('mysql_new')->create('some_table', function($table) { $table->increments('id'): });

Query#

在 Query Builder 类中也是使用 connection() 方法选择数据库即可:

Copy Highlighter-hljs
$users = DB::connection('mysql_new')->select(...);

Eloquent#

这是连接默认数据库的 model 文件,直接使用表即可:

Copy Highlighter-hljs
// \app\Models\Users.php class Users extends Model { // 数据库 'default_db_name' 中的 users 表 protected $table = "users"; }

这是需要连接新增的数据库的 model 文件,使用 $connection 属性进行数据库关联:

Copy Highlighter-hljs
// \app\Models\NewUsers.php class NewUsers extends Model { // 先连接新的数据库设置(config\database.php 新增的字段名) protected $connection = 'mysql_new'; // 数据库 'new_db_name' 中的 users 表 protected $table = "users"; }

然后在其他类文件中引用该 model 文件即可。

另外还可以在控制器中,运行程序的时候,通过 setConnection 方法定义连接:

Copy Highlighter-hljs
<?php class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('mysql_new'); $something = $someModel->find(1); return $something; } }

在 \config\database.php 文件中,如果默认的数据库无法连接,在使用非默认数据库的时候,程序运行过程中会报错,所以要先保证默认数据库能正常连接访问,再使用非默认的数据库。

posted @   caibaotimes  阅读(571)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
CONTENTS