【发布时间】:2018-02-12 22:30:44
【问题描述】:
我希望我的 Laravel Web 应用程序是多租户的,具有一个用于身份验证的通用数据库和一个用于我的客户的特定数据库。
感谢good readings,我想出了如何使用适当的中间件来做到这一点。
在config\database下我添加了我的租户连接:
'tenant_mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => '',
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
...]
然后做了一个专用的MultiTenant中间件:
...
public function handle($request, Closure $next)
{
$tenant_db = Auth::user()->tenant_db;
Config::set('database.connections.tenant_mysql.database', $tenant_db);
return $next($request);
}
最后,我通过添加将tenant_mysql 连接应用到想要的Model:
protected $connection = 'tenant_mysql';
而且效果很好!
我的问题从正确配置我的应用程序中的 DB::raw、DB::table、...queries 开始。
我认为上面创建的将是建立连接的好地方,所以我更新了它:
public function handle($request, Closure $next)
{
$tenant_db = Auth::user()->tenant_db;
DB::purge('tenant_mysql'); //line added
Config::set('database.connections.tenant_mysql.database', $tenant_db);
DB::reconnect('tenant_mysql'); //line added
return $next($request);
}
但对查询没有影响。
希望有人能解释一下..
【问题讨论】:
标签: laravel multi-tenant