LARAVEL 如何连接 2 个不同的数据库并连接不同服务器上的 2 个表?

Posted

技术标签:

【中文标题】LARAVEL 如何连接 2 个不同的数据库并连接不同服务器上的 2 个表?【英文标题】:LARAVEL How to connect 2 different databases and Join 2 tables that are on different servers? 【发布时间】:2017-01-30 20:23:03 【问题描述】:

我有 2 个不同的数据库,我想在这些数据库中内连接 2 个表。

我知道这不是最佳实践,但我需要找到一种使用 LARAVEL 的方法。

我可以通过打开 2 个 connectios 使用纯 php 来做到这一点。但我正在寻找用 laravel 做到这一点的方法。

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

添加另一个连接是解决方案,但我将如何在 1 个内部连接查询中使用 2 个不同服务器中的两个数据库?

【问题讨论】:

简单。你不能 【参考方案1】:

由于我认为您正在使用不同的实体,因此只需通过使用连接名称定义 protected $connection 属性来指定模型中每个实体的连接。

您可以通过在config/database.php 中定义来创建新连接。

像这样:

class Model_One extends Entity

    protected $connection = "database_one";

    [...]

class Model_Two extends Entity

    protected $connection = "database_two";

    [...]
'connections' => [

    'database_one' => [
        'driver'    => 'mysql',
        'host'      => env('DB_ONE_HOST', 'host_one'),
        'port'      => env('DB_ONE_PORT', 3306),
        'database'  => env('DB_ONE_DATABASE', 'database_one'),
        'username'  => env('DB_ONE_USERNAME', 'username'),
        'password'  => env('DB_ONE_PASSWORD', 'secret'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => env('DB_ONE_PREFIX', ''),
        'timezone'  => env('DB_ONE_TIMEZONE', '+00:00'),
        'strict'    => false,
    ],

    'database_two' => [
        'driver'    => 'mysql',
        'host'      => env('DB_TWO_HOST', 'host_two'),
        'port'      => env('DB_TWO_PORT', 3306),
        'database'  => env('DB_TWO_DATABASE', 'database_two'),
        'username'  => env('DB_TWO_USERNAME', 'homestead'),
        'password'  => env('DB_TWO_PASSWORD', 'secret'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => env('DB_TWO_PREFIX', ''),
        'timezone'  => env('DB_TWO_TIMEZONE', '+00:00'),
        'strict'    => false,
    ]
],

【讨论】:

我没有问过如何设置,那是关于如何使用 2 个数据库进行 ELOQUENT QUERY,并使用 table_id 加入。

以上是关于LARAVEL 如何连接 2 个不同的数据库并连接不同服务器上的 2 个表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 8 中的工厂在 tinker 中创建虚拟表数据并连接它们?

如何使用 laravel artisan 设置 env 以拥有两个不同的数据库连接(本地/远程)?

如何使用 Laravel Eloquent 在不同服务器上的多个数据库之间执行连接查询?

Laravel 8 如何连接 2 个表并检查值是不是存在

如何在 Laravel 中的其他 2 个连接表上按日期列排序表?

Laravel:如何编写关于 belongsToMany 关系的连接计数查询?