Laravel在不同的数据库中连接两个表

时间:2018-05-25 18:24:43

标签: php mysql 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();

提前致谢

3 个答案:

答案 0 :(得分:2)

MySql允许您使用相同的连接和用户从同一主机上的两个数据库访问甚至连接。我实际上有一个cron工作,每晚都这样做。我们有2份相同的数据,一份是为客户提供服务,一份是供管理人员编辑,晚上两份进行比较,更改被推送到实时副本。这样,如果有人在更新中犯了错误,我们的客户就会受到保护,因为它不会立即生效。这是一个2个独立的数据库,它与同一个外部联接的魔力同步。 (这是符合我们特定需求的东西,我不会为每个人推荐它)

这很重要,因为用户必须能够访问这两个数据库。这应该是显而易见的,但它经常被忽视,因为人们只是假设它是这种情况,但往往不是。此外,Mysql关于无访问权限的错误报告实际上很差,并且通常采取的形式为“不”和“#34; Seeing"另一个数据库,就像它不是他们的行为(这可能是也可能不是正确的行为,取决于你的要求和在什么情况下)

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

答案 1 :(得分:0)

因此,如果它们位于同一台服务器上,只需创建一个视图:

CREATE VIEW `D2`.`example` AS SELECT * FROM `D1`.`T1`;

答案 2 :(得分:0)

我想要的答案是:

$user=DB::table(DB::raw('sarida_test.user AS db1_tb1'))
            ->join(DB::raw('task_flow.tickets AS db2_tb2'),'db1_tb1.Id','=','db2_tb2.user_id')