首页 > 解决方案 > 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();

提前致谢

标签: phpmysqllaravel

解决方案


MySql 允许您使用相同的连接和用户访问甚至从同一主机上的两个数据库加入。我实际上有一个每天晚上都做的 cron 工作。我们有两份相同的数据,一份是为外来客户直播的,一份是供管理人员编辑的,晚上将两者进行比较并将更改推送到现场副本。这样,如果有人在更新中出错,我们的客户就会受到保护,因为它不会立即生效。这些是 2 个独立的数据库,它们具有完全外部连接的魔力,可以同步。(这是适合我们特定需求的东西,我不会向所有人推荐它)

这很重要,因为用户必须能够访问这两个数据库,这应该是显而易见的,但它经常被忽视,因为人们只是假设它是这种情况,但通常情况并非如此。此外,Mysql 对无法访问的错误报告真的很差,它通常采取没有“看到”其他数据库的形式,就像它不是他们的一样(这可能是也可能不是正确的行为,取决于你问的是谁以及在什么情况下)

您的问题可能是第二个数据库的特权之一。


推荐阅读