【问题标题】:Laravel 5 using 2 db connections join 2 tablesLaravel 5 使用 2 个数据库连接加入 2 个表
【发布时间】:2018-06-22 07:05:11
【问题描述】:

如何加入位于 2 个不同服务器上的 2 个表。

我设置了数据库配置:

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
            'options'   => [
                \PDO::ATTR_EMULATE_PREPARES => true
            ]
        ],

        'mysql2' => [
            'driver' => 'mysql',
            'host' => '132.133.22.9',
            'port' => '3306',
            'database' => 'contracts',
            'username' => 'asdsdsa',
            'password' => 'asdsad',
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
            'options'   => [
                \PDO::ATTR_EMULATE_PREPARES => true
            ]
        ],

我只能访问像DB::connection('mysql')->table('elements')->get();这样的一个

如何将 leftJoin 用于两个不同服务器上的两个表?

假设我有:

元素(服务器 1): id,class_id

类(server2) 身份证、姓名

【问题讨论】:

标签: laravel laravel-5 eloquent query-builder


【解决方案1】:

你可以使用

数据库一(测试)包括元素表和数据库二(测试2)包括类表。

$result= DB::table('elements')
    ->leftjoin('test2.classes', 'elements.class_id', '=', 'classes.id')
    ->get();
dd($result);

您实际上不需要指定第一个数据库连接。默认情况下。

【讨论】:

  • 我的第二个数据库位于外部服务器上,因此必须使用 2 个连接。问题是它是否真的有可能实现?
【解决方案2】:

测试一下:

例如我有两个数据库和一个连接:

数据库一(测试)包括elements 表和数据库二(测试2)包括classes 表。

$result= DB::connection('mysql')->table('elements')
    ->join('test2.classes', 'elements.class_id', '=', 'classes.id')
    ->get();
dd($result);

【讨论】:

  • 是的,一个连接可以正常工作,没问题,但是如果可能的话,如何使用两个不同的连接来做到这一点?
  • 你应该使用 ‍‍Eloquent 并在模型中设置protected $connection = 'mysql2';
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
相关资源
最近更新 更多