我希望我的Laravel网络应用程序成为多租户,其中包含一个用于身份验证的通用数据库和我的客户的特定数据库。
感谢一些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);
}
但对查询没有影响。
希望有人能说清楚......
答案 0 :(得分:1)
您的连接已经设置,您只需使用DB::connection('tenant_mysql')->select(...);
,或者如果您想全局设置它,您可以更改environment (.env)
文件并将名为DB_CONNECTION
的变量更改为{{1喜欢:tenant_mysql