Как объединить таблицы в разных базах данных с разных серверов - PullRequest
0 голосов
/ 15 апреля 2020

[Laravel 6]

Я пытаюсь объединить 2 таблицы из разных серверных баз данных.

Вот конфигурация базы данных:

'mysql' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'db1'),
    'username' => env('DB_USERNAME', 'table1'),
    'password' => env('DB_PASSWORD', 'password'),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]) : [],
],

'external' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL'),
    'host' => env('EXTERNAL_HOST', '123.456.789.2'),
    'port' => env('EXTERNAL_PORT', '3306'),
    'database' => env('EXTERNAL_DATABASE', 'db2'),
    'username' => env('EXTERNAL_USERNAME', 'table2'),
    'password' => env('EXTERNAL_PASSWORD', 'password'),
    'unix_socket' => env('EXTERNAL_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]) : [],
],

Вот query:

return $query->join('db2.table2', function($join) {
    $join->on('table1.gateway', '=', 'db2.table2.gateway');
    $join->on('table1.prefixlen', '=', 'db2.table2.prefixlen');
    $join->on('table1.vlan', '=', 'db2.table2.vlan');
})->select('table1.*');

Но я получил это сообщение об ошибке:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db2.table2' doesn't exist (SQL: select count(*) as aggregate from table1 inner join db2.table2 on table1.gateway = db2.table2.gateway and table1.prefixlen = db2.table2.prefixlen and table1.vlan = db2.table2.vlan)

Я пытался поискать в Google в последние пару дней, но я не мог найти правильный способ сделайте это.

Любые подсказки будут очень признательны.

...