Laravel объединяет две таблицы в разных базах данных - PullRequest
0 голосов
/ 25 мая 2018

Я уже определил свои соединения в 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 голосов
/ 25 мая 2018

MySql позволяет вам получить доступ и даже присоединиться к двум базам данных на одном хосте, используя одно и то же соединение и пользователя.У меня действительно есть работа cron, которая делает это каждую ночь.У нас есть 2 копии одних и тех же данных, одна предназначена для клиентов, другая для управления, а ночью сравниваются две и изменения передаются в оперативную копию.Таким образом, наши клиенты защищены, если кто-то допустил ошибку в обновлениях, так как они не сразу появились.Это две отдельные базы данных, которые с помощью магии полного внешнего объединения синхронизируются.(это то, что соответствует нашим конкретным потребностям, и я бы не рекомендовал это для всех)

Это важно, потому что пользователь должен иметь доступ к обеим базам данных. Это должно быть очевидно, но это часто упускается из виду как однопредполагает, что это так, но часто это не так.Кроме того, отчеты об ошибках Mysql об отсутствии доступа действительно плохие, и они часто принимают форму отсутствия «видения» другой базы данных и просто действуют как ее не их (это может или не может быть правильным поведением в зависимости от того, кого вы спрашиваете и в каком контексте)

Вероятно, ваша проблема связана с привилегией для второй базы данных.

0 голосов
/ 27 мая 2018

я хотел получить ответ:

$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')
0 голосов
/ 25 мая 2018

Так что, если они находятся на одном и том же сервере, просто создайте вид, подобный:

CREATE VIEW `D2`.`example` AS SELECT * FROM `D1`.`T1`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...