问题描述
我使用 vanilla PHP 作为后端,使用 jquery 和 vanilla javascript 作为前端开发了一个 Web 会计应用程序。每个客户端将有一个数据库。单个数据库包含所有客户端的数据库连接字符串和客户端的登录凭据。每当客户端使用登录凭据登录时,客户端都会从存储所有数据库连接的 master 数据库中获取连接字符串。根据登录凭据,我的后端将连接到他们的数据库。他们将处理他们的数据库。
我如何使用 laravel 8 实现这个场景?我尝试了几种解决方案,例如, Dynamic database connection in Laravel, Create Dynamic Database Connection in Laravel, Laravel 5.8 dynamic database connection not being set in model, laravel 5.4 dynamic database connection, Configure database connections on the fly in Laravel
所有这些解决方案都推荐使用配置文件或 .env 文件。正如您在我的场景中看到的,我无法在数据库配置数组中设置每个客户端的数据库连接,因为我的客户端的数据库连接是动态的,并且有很多数据库连接。
那么你们有什么建议来克服这种情况?
而且我不想使用多租户设置它只是矫枉过正,我想要的是在记录时抓取连接字符串并使用该连接字符串连接用户的特定数据库。所以它是一种动态!
解决方法
- 将连接添加到 config/database.php(您可以复制和编辑名称。)例如。复制并更改名称为“mysql_user”
- 制作中间件
- 在中间件中检查身份验证并获取凭据
- 在中间件中设置配置
Config::set('database.connections.mysql_user',[
'host' => $user->connaction->host,'user' => $user->connaction->user,...
])
- 使用时
DB::connection('mysql_user')->...
#in Model
protected $connection= 'mysql_user';
- 不要忘记使用中间件
听起来您正在寻找多租户设置。选项之一是使用 tenancy/multi-tenant
包,如下所述:https://blog.peretch.com/multi-tenant-implementation-with-laravel-8-5d4471ed4c40