php - Laravel 同时动态连接不同的数据库
问题描述
我正在构建一个 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
所以我的问题是:
这种动态数据库配置会影响整个项目吗?
如果有许多用户试图同时连接到不同的数据库怎么办?这会起作用还是他们都会共享对配置的最后一次修改?
有没有更好的方法来做到这一点,同时将每只股票保存在单独的数据库中?
解决方案
这种动态数据库配置会影响整个项目吗?
是的,只要你在connect
每次请求进入时都调用了你定义的这个方法。
如果有许多用户试图同时连接到不同的数据库怎么办?这会起作用还是他们都会共享对配置的最后一次修改?
每次用户提出请求时,初始配置将是来自 .env 的配置,直到您调用您的connect
方法。所以,是的,即使有很多用户连接到您的服务器(只要他们在不同的请求中),它也不会中断。
有没有更好的方法来做到这一点,同时将每只股票保存在单独的数据库中?
我认为您可以将连接方法放在中间件中,以便在经过身份验证的用户发出请求时连接到所需的数据库。
推荐阅读
- amazon-web-services - 是否可以在 AWS Glue 中创建值包含“/”的分区
- python - 按收藏时间排序 Twitter API 页面,而不是创建时间
- django - Django REST框架,序列化器性能下降
- php - 如何在 laravel 中编辑默认验证消息?
- php - Laravel Join 与第二个表中的 JSON 列
- python - 如何使用pandas根据原始数据为新增列赋值?
- angular - Angular 不在我创建的代理上运行,并将其默认 localhost 放在我的 api 之前
- javascript - 如何使用户脚本不下载现有文件
- python - 使用 pygame.midi 播放 midi 音符时出现分段错误
- python - Pyspark 中的别名