Laravel 使用多个数据库连接

1、配置.env文件

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=

DB_HOST_CENTER=127.0.0.1
DB_PORT_CENTER=3306
DB_DATABASE_CENTER=database_center
DB_USERNAME_CENTER=root
DB_PASSWORD_CENTER=

2、配置config/database.php

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
],
'mysql_center' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST_CENTER', 'localhost'),
        'port' => env('DB_PORT_CENTER', '3306'),
        'database' => env('DB_DATABASE_CENTER', 'forge'),
        'username' => env('DB_USERNAME_CENTER', 'forge'),
        'password' => env('DB_PASSWORD_CENTER', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
],

3、创建model

a、这个model将采用默认的'mysql'连接
class UserModel extends Model
{
        // 数据库'database'中的users表
        protected $table = "users";
}

b、 这个model将使用mysql_center连接
class UserModel extends Model
{
    // 数据库'dadtabase_center'中的users表
        protected $connection = 'mysql_center';
        protected $table = "users";

}
本作品采用《CC 协议》,转载必须注明作者和本文链接
不要轻易放弃。学习成长的路上,我们长路漫漫,只因学无止境 Don't give up easily. On the way of learning and growing up, we have a long way to go, just because there is no end to learning.
本帖由系统于 3年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

如果一台数据库服务器上有上百个databae,怎么处理比较好?

4年前 评论
vinhson (楼主) 4年前

:joy: 相当于在 config/databases.php 配上几百个连接,这也太难受了。

4年前 评论
vinhson (楼主) 4年前
vinhson (楼主) 4年前
piszd (作者) 4年前

太好了,能具体说一下吧。

4年前 评论

@piszd

$database = \App\Model\Database::where('id', $id)->first();

foreach ($database as $key => $value) {
    config(['database.connections.mysql.'.$key => $val]);
}

\Illuminate\Support\Facades\DB::purge();
4年前 评论
piszd 4年前
piszd 4年前

终于想到怎么处理了,记录一下。env DB_DATABASE不要配置,在Model里面把 protected $table 的配置写成 库名.表名

MySqlConnector.connect
if (! empty($config[‘database’])) {
$connection->exec(“use {$config['database']};”);
}

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!