В web.php я переключил схемы Postgres в промежуточное программное обеспечение, когда был создан тип поддомена HTTP-запроса. Сюда:
Route::group( [ 'domain' => '{tenant}.' . config('app.url'), 'middleware' => 'select-schema' ], function () { $this->get('/', 'HomeController@index')->middleware('auth'); } );
В промежуточном программном обеспечении select-schema я делаю что-то вроде этого. Это работает правильно. (не волнуйтесь)
DB::select('SET search_path TO ' . {tenant});
Моя основная проблема заключается в том, что: у меня разные migrations
для public
схемы и для любого individual tenant
. У individual tenant
меня есть таблица users
. Как только я войду в систему, вы увидите эту ошибку.
SQLSTATE [42P01]: неопределенная таблица: 7 ОШИБКА: отношения «пользователи» не существуют
Основная проблема
$this->get('/', 'HomeController@index')->middleware('auth');
Модель работает хорошо, но middleware auth
выполняется сначала перед select-schema
Как заказать? select-schema
затем auth
Вы пробовали обернуть свои маршруты в группе арендаторов другой группой? Посмотрите, работает ли это:
Route::group([ 'domain' => '{tenant}.' . config('app.url'), 'middleware' => 'select-schema' ],function () { Route::group(['middleware' => 'auth'], function () { Route::get('/', 'HomeController@index'); }); } );
Я нашел решение, для этого есть что-то, называемое $middlewarePriority
в App\Kernel
.
Добавляя эту помощь, я решаю проблему.
/** * Responsible for prioritizing the middleware * * @var array */ protected $middlewarePriority = [ \App\Http\Middleware\SwitchSchema::class, ];
У меня есть решение по этой ссылке.