Laravel中间件的顺序(Middleware Priority)。使用Postgres的多租户

Sag*_*ing 1 php postgresql middleware multi-tenant laravel

web.php中,随着发出HTTP请求的子域类型,我在中间件中切换了Postgres模式。这条路:

Route::group(
    [
        'domain'     => '{tenant}.' . config('app.url'),
        'middleware' => 'select-schema'
    ],
    function () {
        $this->get('/', 'HomeController@index')->middleware('auth');
    }
);
Run Code Online (Sandbox Code Playgroud)

选择模式中间件中,我这样做。这可以正常工作。(不用担心)

DB::select('SET search_path TO ' . {tenant});
Run Code Online (Sandbox Code Playgroud)

我的主要问题是:migrations对于public方案和任何其他方案,我都有所不同individual tenant。在individual tenant我有users桌子。一旦我登录,就会弹出此错误。

SQLSTATE [42P01]:未定义表:7错误:关系“用户”不存在

主要问题是

$this->get('/', 'HomeController@index')->middleware('auth');
Run Code Online (Sandbox Code Playgroud)

该模型运行良好,但中间件auth先执行 select-schema

我该如何订购? select-schema然后auth

Sag*_*ing 5

我已经找到了解决办法,对于这一点,有一些所谓的$middlewarePriorityApp\Kernel

添加这个可以帮助我解决问题。

/**
 * Responsible for prioritizing the middleware
 *
 * @var array
 */
protected $middlewarePriority = [
    \App\Http\Middleware\SwitchSchema::class,
];
Run Code Online (Sandbox Code Playgroud)

我已经从此链接获得解决方案。

https://github.com/laravel/framework/issues/19565