gpt4 book ai didi

php - Laravel 同时动态连接到不同的数据库

转载 作者:行者123 更新时间:2023-11-29 02:39:41 25 4
gpt4 key购买 nike

我正在构建一个 Laravel 股票管理应用程序,它允许每个订阅者(用户)在单独的数据库中拥有一个股票

所有用户的数据库都具有相同的设计,源自相同的 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 - 我通过向此方法提供 database_name 动态更改数据库配置来连接到 stock_1 数据库:

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 - 如果输入的emailpassword 正确,我检查此数据库中的users 表,然后登录用户.

所以我的问题是:

  • 这个动态数据库配置会影响整个项目吗?

  • 如果有很多用户试图同时连接到不同的数据库怎么办?这会起作用吗,或者他们将共享对配置的最后修改?

  • 有没有更好的方法来做到这一点,同时将每只股票保存在一个单独的数据库中?

最佳答案

Does this dynamic database configuration affect the whole project ?

是的,只要您在每次收到请求时都调用了您定义的connect 方法即可。

What if there are many users trying to connect to different databases at the same time? Is this going to work or they'll all share the same last modification to the config?

每次用户发出请求时,初始配置都是来自 .env 的配置,直到您调用 connect 方法。所以是的,即使有很多用户连接到您的服务器(只要他们处于不同的请求中),它也不会中断。

Is there a better way to do this while keeping each stock in a separate database?

我认为您可以将连接方法放在中间件中,这样只要经过身份验证的用户发出请求,您就可以连接到所需的数据库。

关于php - Laravel 同时动态连接到不同的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55393321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com