我正在构建一个Laravel库存管理应用程序,该应用程序允许每个子客户(用户)在单独的数据库中拥有一个stock
。
所有用户的数据库都具有源自相同Laravel迁移的相同设计。
我有一个master_database
,其中包含一个stock
表,如下所示:
id database_name
1 stock_1
2 stock_2
master_database
是默认数据库,其凭据位于.env文件中)用户将能够通过提交包含3个字段的表单来登录应用程序:
- database_name
- email
- password
例如,当用户想要连接到stock_1
数据库时,我将执行以下操作:
1-我检查stock_1
表(在stock
中是否存在master_database
数据库。
2-通过向此方法提供stock_1
来动态更改数据库配置,从而连接到database_name
数据库:
public static function connect($db)
{
// get default connection
$connections = \Config::get('database.connections');
$newConnection = $connections[\Config::get('database.default')];
$newConnection['database'] = $db;
$newConnection['username'] = 'root';
$newConnection['password'] = 'root';
\Config::set('database.connections.' . $newConnection['database'], $newConnection);
\Config::set('database.default', $newConnection['database']);
}
3-我在此数据库的users
表中检查输入的email
和password
是否正确,然后登录用户。
所以我的问题是:
此动态数据库配置会影响整个项目吗?
如果有许多用户试图同时连接到不同的数据库怎么办?这会奏效吗,否则他们都会对配置共享相同的最后修改?
在将每只股票保存在单独的数据库中时,还有更好的方法吗?
答案 0 :(得分:1)
这种动态数据库配置会影响整个项目吗?
是的,只要您在每次请求进入时都定义了此connect
方法即可。
如果有许多用户试图同时连接到不同的数据库怎么办?这会起作用吗,或者他们都会对配置共享相同的最后修改?
每次用户发出请求时,初始配置都是.env中的配置,直到您调用connect
方法为止。是的,即使有许多用户连接到您的服务器(只要他们在不同的请求中),它也不会中断。
在将每只股票保存在单独的数据库中时,还有更好的方法吗?
我认为您可以将connect方法放入中间件中,以便每当经过身份验证的用户提出请求时,您都可以连接到所需的数据库。