当前位置: 首页 > 知识库问答 >
问题:

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

韦鸣
2023-03-14

有没有办法对来自不同服务器的多个数据库使用联接查询?

我的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);

}

共有1个答案

庞元青
2023-03-14

简短回答:你不能正确地分页。

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

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

另一种解决方案是使用传统的服务器端分页来创建两个表。

最复杂的解决方案和最好的解决方案(不使用复制)是使用联邦存储引擎,在那里它就像在第二个数据库中有一个表来表示那个表。这样,您只与一个数据库通信,它自己处理第二个数据库。

 类似资料:
  • 嗨,我是拉威尔的新手,我在将数据插入数据库和抛出错误时遇到了麻烦 msgstr"Countable():参数必须是实现可数的数组或对象" 我想在数据库中添加所有注册员工的出勤信息 控制器 叶片输出: 模型类员工出席扩展模型{// } 模型2 命名空间App; 使用Illumb\Database\Elount\Model; 类employee_data扩展模型{//protected$fillabe

  • 问题内容: 我想在系统中合并多个数据库。大多数情况下,数据库是MySQL。但是将来可能会有所不同,即Admin可以生成这样的报告,该报告是 使用异构 数据库系统的 来源 。 所以我的问题是 Laravel是否提供了Facade 来应对这种情况?还是任何其他具有更合适问题处理能力的框架是? 问题答案: [**使用> = 5.0**](https://github.com/laravel/larave

  • 假设我加载了一个具有函数本机库,并且想要加载另一个也具有函数的本机库 - 我如何以“库感知”方式查找一个(例如,在某些情况下使用中的否则使用)? 我尝试了但这似乎只是获取在加载的本机库中找到的第一个符号。 在内部类中搜索后,我发现似乎很有希望但不公开,因此我实现了一个类似的方法来查找加载的本机库: 然而,这显然是被禁止的,因为我不能从另一个类装入器装入库(我不知道最初使用的是哪个类装入器): 所以

  • 使用服务器地址192.168.1.30从Ruby客户机向Ruby服务器发送UDP包可以按预期工作,但前提是客户机和服务器在同一台主机上。如果客户机运行在不同的机器上,UDP包会找到到达服务器的路,但是我的服务器进程不会注意到。 服务器: 客户: 启动服务器后,< code > netstat-n-UDP-listen 确认套接字是打开的: 运行客户端两次(192.168.1.30和.23)后,服务

  • 我使用的是Spring Boot1.5.18.Release。 我使用以下链接跟踪了多个数据源: 但当我在同一台服务器中有数据源时,它会起作用。 下面是我的案例: 一台服务器上的DataSource1:Server1 另一服务器上的DataSource2:server2 使用本机查询,我必须通过连接2个数据源来获取记录。 在上述情况下,Spring Boot应用程序试图仅检查服务器1中的表,结果我

  • 我正在尝试从jenkins master中的git存储库中提取数据(文件),然后将这些文件推送到多个从机。我正在使用复制工件到从机插件(https://wiki.jenkins-ci.org/display/jenkins/Copy+to+Slave+plugin)将数据从主机复制到从机。但是我无法找到如何指定要复制文件的从机的名称。请帮助