如何在 Laravel 中连接多个 MySQL 数据库?

52

第一步、定义数据库链接

config/database.php

<?php
return [

    'default' => 'mysql',

    'connections' => [

        # 主要数据库连接
        'mysql' => [
            'driver'    => 'mysql',
            'host'      => 'host1',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1',
            'charset'   => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix'    => '',
        ],

        # 第二个链接
        'mysql2' => [
            'driver'    => 'mysql',
            'host'      => 'host2',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2',
            'charset'   => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix'    => '',
        ]
    ],
];

第二步、连接第二个数据库

我们已经成功配置了第二个数据库链接,接下来讲解几种连接的方法。

1. Schema 表结构更改

在代码迁移时,可以使用 Schema 提供的 connection() 方法:

Schema::connection('mysql2')->create('some_table', function($table)
{
    $table->increments('id'):
});

2. Query 数据库查询

同样的,数据库查询构造器里提供了一个 connection() 方法:

$users = DB::connection('mysql2')->select(...);

3. Eloquent 数据模型

使用 $connection 属性来设置默认的连接:

<?php

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';

}

你可以可以使用 setConnection 来动态设置连接:

<?php

class SomeController extends BaseController {

    public function someMethod()
    {
        $someModel = new SomeModel;

        $someModel->setConnection('mysql2');

        $something = $someModel->find(1);

        return $something;
    }

}

或者使用 on() 方法:

$someModel->on('mysql2')->find(1);
讨论数量: 5

在join 查询中如何 连接多个数据库跨库查询呢?

2个月前
loveinalife

@vopdoo 貌似没这样玩过,

2个月前

ss

2个月前

@vopdoo 可以使用这种连接$users = DB::connection('mysql2')->select(...);

2个月前

@vopdoo 不能跨库的话,分开查询,先从一个库查询出结果,把结果集放到另外一个库查询也可以的吧

1个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!