Laravel 7 - 如何在登录时更改数据库?

Posted

技术标签:

【中文标题】Laravel 7 - 如何在登录时更改数据库?【英文标题】:Laravel 7 - How can I change database at login? 【发布时间】:2020-10-05 20:20:55 【问题描述】:

我的 laravel 7 项目中有几个数据库。 我有一个“主”数据库,我将用户与另一个辅助数据库相关联。 因此,主数据库始终相同,但辅助数据库不同,具体取决于用户。用户登录时如何选择数据库?

【问题讨论】:

【参考方案1】:

您可以使用以下方式更改数据库。

config()->set('database.default', 'user-1-db');

PS:以上将仅更改单个请求的数据库连接。因此,要根据用户来实现它,您可以通过创建中间件来实现。了解中间件here。

【讨论】:

【参考方案2】:

您可以在config/database.php上定义多个数据库连接

并且当用户登录时,根据用户信息更改此变量的配置值。

假设您添加了一个名为tenant_db 的新数据库连接,并且用户的目标数据库名称是“tenant_user_db_1”,用户名是“tenant_user_1”,密码是“tenant_user_1_password”

然后您可以使用此更改数据库连接

$connection = "tenant_db";
$dbname = "tenant_user_db_1";
$username = "tenant_user_1";
$password = "tenant_user_1_password";

config(['database.connections.'.$connection.'.database' => $database]);

config(['database.connections.'.$connection.'.username' => $username]);

config(['database.connections.'.$connection.'.password' => $password]);

DB::reconnect($connection);

【讨论】:

我是在 LoginController 中完成的,但后来我得到一个 SQLSTATE [3D000]: Invalid catalog name: 1046 No database selected

以上是关于Laravel 7 - 如何在登录时更改数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何更改默认登录错误消息:'这些凭据与我们的记录不匹配'

如何在 Laravel 5 中登录时检查用户状态?

Laravel 5.0 - 登录失败时更改重定向

如何更改 Laravel 5.2 更改登录路由?

如何更改默认的Laravel Auth登录视图

在 Laravel 中动态更改数据库连接 [重复]