В config/database.php
у меня два соединения: mysql
и website
. Оба подключаются к одному и тому же хосту, просто базы данных разные. По умолчанию mysql
.
Я создал промежуточное ПО под названием SetupWebsite
, которое проверяет, существует ли входящий домен в базе данных в соединении по умолчанию. Если это так, он заполняет соединение website
с правильной базой данных с помощью следующего кода:
config(['database.connections.website.database' => $database]);
Затем он переключает соединение по умолчанию на website
:
config(['database.default' => 'website']);
Я убедился, что соединение по умолчанию теперь website
, получив значение из базы данных, которое существует только в соединении website
. Я также могу войти в учетную запись пользователя в соединении website
. Теперь, когда я установил следующий маршрут:
Route::get('admin', function () {
return 'Welcome to the dashboard!';
})->middleware('auth');
И я иду туда после успешного входа в систему, я получаю сообщение об ошибке, что «tbl_users не существует», и я вижу, что он использует соединение mysql
для проверки подлинности пользователя. У меня закончились идеи, как сообщить Laravel, что я использую другое подключение к базе данных. FIY: Я не кэшировал конфигурацию.
ОБНОВИТЬ
Когда я добавляю следующий код в конструктор Illuminate\Auth\Middleware\Authenticate::class
:
DB::setDefaultConnection('website');
Я получаю сообщение об ошибке, что база данных не выбрана, что означает, что промежуточное ПО аутентификации «создано» до того, как мое промежуточное ПО SetupWebsite
сделает свое волшебство. Любые предложения, как я могу это исправить?