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

1sbrub3j  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(367)

我已经在中定义了我的连接 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();

提前谢谢

dbf7pr2w

dbf7pr2w1#

我想要的答案是:

$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')
ffscu2ro

ffscu2ro2#

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

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

nmpmafwu3#

mysql允许您使用相同的连接和用户从同一主机上的两个数据库进行访问甚至连接。实际上我有一份每天晚上都做这个的工作。我们有两个相同数据的副本,一个是实时的客户端,一个是供管理层编辑,在晚上比较这两个数据,并将更改推送到实时副本。这样,我们的客户受到保护,如果有人在更新中出错,因为它不是立即生效。这是两个独立的数据库,它们通过一个完整的外部连接进行同步(这是符合我们特定需求的产品,我不建议每个人都使用)
这一点很重要,因为用户必须能够访问这两个数据库,这一点很明显,但经常被忽略,因为人们只是假设情况是这样,但往往不是这样。此外,mysql关于no-access的错误报告非常糟糕,它通常采取不“看到”其他数据库的形式,并且表现得好像它不是他们的数据库(这可能是正确的行为,也可能不是正确的行为,这取决于你问的是谁,在什么上下文中)
很可能您的问题是第二个数据库的特权问题。

相关问题