php - Laravel 连接不同数据库中的两个表
问题描述
我已经在以下位置定义了我的连接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', '127.0.0.1'),
'port' => env('DB_PORT_2', '3306'),
'database' => env('DB_DATABASE_2', 'db2'),
'username' => env('DB_USERNAME_2', 'root'),
'password' => env('DB_PASSWORD_2', ''),
...
],
我想从.db2
的表票加入表用户db1
。请帮助表示赞赏。我尝试了下面的一个,但由于票表来自 db1 无法识别
$user= DB::connection("mysql2")->table('User')
->join('ticket', 'User.Id', '=','ticket.user_id')
->select('User.*')
->where('ticket.id', '=', 1)
->get();
提前致谢
解决方案
MySql 允许您使用相同的连接和用户访问甚至从同一主机上的两个数据库加入。我实际上有一个每天晚上都做的 cron 工作。我们有两份相同的数据,一份是为外来客户直播的,一份是供管理人员编辑的,晚上将两者进行比较并将更改推送到现场副本。这样,如果有人在更新中出错,我们的客户就会受到保护,因为它不会立即生效。这些是 2 个独立的数据库,它们具有完全外部连接的魔力,可以同步。(这是适合我们特定需求的东西,我不会向所有人推荐它)
这很重要,因为用户必须能够访问这两个数据库,这应该是显而易见的,但它经常被忽视,因为人们只是假设它是这种情况,但通常情况并非如此。此外,Mysql 对无法访问的错误报告真的很差,它通常采取没有“看到”其他数据库的形式,就像它不是他们的一样(这可能是也可能不是正确的行为,取决于你问的是谁以及在什么情况下)
您的问题可能是第二个数据库的特权之一。
推荐阅读
- python - Selenium 返回错误的元素,选择第一个兄弟元素而不是查看元素本身
- react-native - 使用电子邮件创建用户的 Firebase 身份验证
- javascript - 如何在 Owl 轮播导航按钮中添加“边框”(大约下一个和上一个)
- javascript - 如何将功能组件中的道具添加到类组件中?
- angular - 角度嵌套表单数组映射问题
- python - numpy/pandas 矢量化自定义 for 循环
- swift - Swift - 动画后恢复 x 位置
- flutter - Flutter Renderflex问题
- javascript - 将自定义主机标头添加到超测请求
- java - 使用远程调试运行 docker-compose。英特尔,Java 11