在记录时获取特定的数据库连接字符串并在 laravel 8 中动态连接到该数据库?

Get specific database connection string while logging and connect to that database dynamically in laravel 8?

我开发了一个网络会计应用程序,使用 vanilla PHP 作为后端,jquery 和 vanilla javascript 作为前端。每个客户都有一个数据库。单个数据库包含所有客户端的数据库连接字符串和客户端的登录凭据。每当客户端使用登录凭据登录时,客户端都会从存储所有数据库连接的主数据库获取连接字符串。基于登录凭据,我的后端将连接到他们的数据库。他们将处理他们的数据库。

如何使用 laravel 8 实现这种情况?我尝试了几种解决方案,例如 Dynamic database connection in Laravel, Create Dynamic Database Connection in Laravel, Laravel 5.8 dynamic database connection not being set in model, , Configure database connections on the fly in Laravel

这些所有解决方案都推荐使用配置文件或 .env 文件。正如您在我的场景中看到的那样,我无法在数据库配置数组中设置每个客户端的数据库连接,因为我的客户端的数据库连接是动态的并且有很多数据库连接。

那么你们有什么建议来克服这种情况?

而且我不想使用多租户设置它只是矫枉过正,我想要的是在记录时获取连接字符串并使用该连接字符串连接用户的特定数据库。所以这是一种动态!

  1. 将连接添加到 config/database。php(您可以复制并编辑名称。)例如。复制并将名称更改为“mysql_user”
  2. 制作中间件
  3. 在中间件中检查身份验证并获取凭据
  4. 在中间件中设置配置
Config::set('database.connections.mysql_user',[
'host' => $user->connaction->host,
'user' => $user->connaction->user,
...
])
  1. 当你使用
DB::connection('mysql_user')->...

#in Model
protected $connection= 'mysql_user';
  1. 别忘了使用中间件

听起来您正在寻找多租户设置。其中一种选择是使用 tenancy/multi-tenant 包,如下所述:https://blog.peretch.com/multi-tenant-implementation-with-laravel-8-5d4471ed4c40