如何在 Laravel 中加入来自不同主机的多个数据库

Posted

技术标签:

【中文标题】如何在 Laravel 中加入来自不同主机的多个数据库【英文标题】:How to join Multiple databases from different hosts in Laravel 【发布时间】:2022-01-13 09:33:33 【问题描述】:

有什么方法可以对来自不同服务器的多个数据库使用联接查询?

我的database.php

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'db1'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            ...
        ],

        'mysql2' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST_2', '192.233.****.*'),
            'port' => env('DB_PORT_2', '3306'),
            'database' => env('DB_DATABASE_2', 'db2'),
            'username' => env('DB_USERNAME_2', 'root'),
            'password' => env('DB_PASSWORD_2', ''),
         ...
        ]

我需要在连接查询中实现它。

我的控制器功能是

public function function1()
$db1 = DB::connection('mysql2');
$result = TABLE1::join($db1 . '.' . 'table2', 'table2.id','=','table1.table2_id');

return Datatables::of($result);


【问题讨论】:

可能的重复。 ***.com/questions/31847054/… 不同的是,在提到的问题中,他们使用的是同一个主机。 同样的逻辑适用。 fideloper.com/laravel-multiple-database-connections 是的,我已经尝试过这些逻辑。但是不能在Join中使用。 这能回答你的问题吗? Join tables from two different server 【参考方案1】:

简答:你不能正确地对它们进行分页。

为了能够使用服务器端分页,数据需要来自同一来源并实现分页。

您可能必须能够通过适当的分页显示结果的数据表的唯一解决方案是获取所有数据(使用集合对它们进行排序)并使用数据表在 JS 中分页。

另一种解决方案是使用两个具有传统服务器端分页的表格。

最复杂的解决方案和最好的解决方案(不使用复制)是使用Federated Storage engine,这就像在第二个数据库中拥有一个代表该表的表。这样,您只与一个数据库通信,它自己处理第二个数据库。

【讨论】:

以上是关于如何在 Laravel 中加入来自不同主机的多个数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中加入同一张表

如何在 laravel eloquent 中加入三个表?

如何使用 eloquent hasmanythrough 或 hasonethrough 在 laravel 中加入 3 个表

如何检查表是不是已在 Laravel 查询生成器中加入

如何在 Flutter 中加入来自两个 Firestore 集合的数据?

在 laravel 中加入查询