Динамическое подключение к бд Laravel

Я пытаюсь реализовать через middleware динамическое соединение с бд. (добавлю: будет существовать около 200 подключений к бд. Каждое подключение, может быть, отдельным сервером. Структура бд будет одна и та же, будут меняться сами данные)

Успешно приходят данные, я заменяю их в config('database.connections.name)введите сюда описание изображения

Возникает ошибка:введите сюда описание изображения

Как я выяснил эта ошибка возникает из-за удалении сессии. Уходит запрос на удаление сессии в бд, имея при этом старое подключение введите сюда описание изображения

Переменная $this - имеет старое подключение, но если я запрашиваю модель, она берется из нового подключения.

Если я в middleware убираю DB::purge('tr_archive');

Тогда запрос уходит, авторизация прошла успешно. Но сессия не сохраняется в базе данных, и на следующий запрос возвращается 401, необходимо авторизоваться

Так же пытался добавить новое подключение к бд и к session.connection, ошибка та же, что и на втором скриншоте

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Николай

app/config/database.php

return array(

    'default' => 'mysql',

    'connections' => array(

        # Primary/Default database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'host1',
            'database'  => 'database1',
            'username'  => 'user1',
            'password'  => 'pass1'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # Secondary database connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'host2',
            'database'  => 'database2',
            'username'  => 'user2',
            'password'  => 'pass2'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

Запрос ко второму подключению:

$users = DB::connection('mysql2')->select(...);
→ Ссылка
Автор решения: Vladimir

Получилось разобраться с этой ситуации. Сессия почему-то не может переподключиться к новому соединению. Изначально мы использовали две бд.

  1. использовали для различных метрик, и базовые ларавеловские таблицы
  2. база данных приложения. Там всё таблицы, для всех моделей. Это подключение должно изменяться.

И вот у нас сессия хранилась во второй базе. Когда мы меняли подключение, то система не видела старое соединение с базой. Мы перенесли таблицу сессию ларавеь в первое соединение. Теперь всё работает.

→ Ссылка