Laravel动态连接到不同数据库

时间:2019-03-28 08:45:09

标签: php mysql 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表中检查输入的emailpassword是否正确,然后登录用户。

所以我的问题是:

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

  • 如果有许多用户试图同时连接到不同的数据库怎么办?这会奏效吗,否则他们都会对配置共享相同的最后修改?

  • 在将每只股票保存在单独的数据库中时,还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

  

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

是的,只要您在每次请求进入时都定义了此connect方法即可。

  

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

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

  

在将每只股票保存在单独的数据库中时,还有更好的方法吗?

我认为您可以将connect方法放入中间件中,以便每当经过身份验证的用户提出请求时,您都可以连接到所需的数据库。