在我的应用程序中,我有不同的业务,并且有许多用户。 例如:
等等..
每个企业都有自己独立的数据库,因此用户A,B和C访问同一个数据库,而用户D和E访问不同的数据库(每个租户数据库的结构相同,唯一不同的是数据)
有一个主数据库为每个用户提供此信息,因此我知道用户所属的数据库。
'main' => array(
'driver' => 'mysql',
'host' => 'hostname',
'database' => 'main_database',
'username' => 'username',
'password' => 'password',
'prefix' => '',
),
'tenant' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => DYNAMIC_DATABASE_NAME_GOES_HERE,
'username' => 'username',
'password' => 'password',
'prefix' => '',
),
我需要找到一种方法在Laravel中执行以下操作:
如何在Laravel 5.4中实现这一目标?
答案 0 :(得分:1)
这个link有一个非常好的例子,你正在寻找什么。
1)在数据库配置中设置两个连接。
'main' => array(
'driver' => 'mysql',
'host' => 'hostname',
'database' => 'database',
'username' => 'username',
'password' => 'password',
'prefix' => '',
),
'tenant' => array(
'driver' => 'mysql',
'host' => '',
'database' => '',
'username' => '',
'password' => '',
'prefix' => '',
)
2)然后切换数据库,将以下代码放入过滤器或中间件中。考虑到您有Tenant
数据库连接信息模型。
$tenant = Tenant::whereSubDomain($subdomain)->first();
Config::set('database.connections.tenant.host', $tenant ->host);
Config::set('database.connections.tenant.username', $tenant ->username);
Config::set('database.connections.tenant.password', $tenant ->password);
Config::set('database.connections.tenant.database', $tenant ->database);
//If you want to use query builder without having to specify the connection
Config::set('database.default', 'tenant');
\DB::purge('tenant');
\DB::reconnect('tenant');
dd(\DB::connection('tenant'));
3)在模型中指定以下内容
//On models dealing with the main DB
protected $connection = 'main';
//On models dealing with tenant DBs
protected $connection = 'tenant';