2017-06-11 2 views
0

Dans web.php Je suis passé des schémas Postgres dans le middleware comme le type de requête HTTP sous-domaine est fait. De cette façon:pour Laravel de middleware (intergiciel priorité). Multi-locataires à l'aide Postgres

Route::group(
    [ 
     'domain'  => '{tenant}.' . config('app.url'), 
     'middleware' => 'select-schema' 
    ], 
    function() { 
     $this->get('/', '[email protected]')->middleware('auth'); 
    } 
); 

Dans middleware select-schéma, je fais quelque chose comme ça. Cela fonctionne correctement. (Ne vous inquiétez pas)

DB::select('SET search_path TO ' . {tenant}); 

Mon principal problème est que: j'ai différents migrations pour le schéma public et pour tout individual tenant. En individual tenant je users tableau. Dès que je suis connecté ce pop-up cette erreur.

SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "users" does not exist

Le principal problème est

$this->get('/', '[email protected]')->middleware('auth'); 

Le modèle fonctionne bien, mais middleware auth exécuter avant de select-schema

Comment puis-je commander?select-schema puis auth

Répondre

1

J'ai trouvé la solution, Pour cela, il y a quelque chose appelé $middlewarePriority dans App\Kernel.

L'ajout de cette aide-moi à résoudre le problème.

/** 
* Responsible for prioritizing the middleware 
* 
* @var array 
*/ 
protected $middlewarePriority = [ 
    \App\Http\Middleware\SwitchSchema::class, 
]; 

J'ai une solution à partir de ce lien.

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

0

Avez-vous essayé d'encapsuler vos itinéraires dans le groupe de locataires avec un autre groupe? Voir si cela fonctionne:

Route::group([ 
     'domain'  => '{tenant}.' . config('app.url'), 
     'middleware' => 'select-schema' 
    ],function() { 
     Route::group(['middleware' => 'auth'], function() { 
      Route::get('/', '[email protected]'); 
     }); 
    } 
); 
+0

Oui j'ai essayé a fait, cela ne fonctionne pas. En tout cas j'ai trouvé la solution. Merci. –