php - 使用 laravel 实现云
问题描述
我已经构建了一个尚未实现到云的应用程序,但是我计划更改其架构以具有云功能。我计划为每个客户提供一个应用程序,每个客户都有一个不同的/客户特定的数据库。我尝试在 config/database.php 中设置多个数据库并将默认连接设置为我的系统数据库。我计划在这个数据库中有 2 个表,一个是用户表(用于身份验证)和客户端表,用于获取客户端数据库信息(数据库名称、用户名、密码等)。身份验证完成后,我将获取客户端详细信息并连接到客户端数据库,我希望身份验证后的所有其他操作都发生在该连接上。完成身份验证后,我尝试使用以下代码即时创建连接
DB::disconnect(); /* disconnecting system database connection
and creating a new connection dynamically based on the values i get from
clients table */
config::set(['database.connections.on_fly' => [
'driver' => $params['driver'],
'host' => $params['host'],
'database' => $params['database'],
'username' => $params['username'],
'password' => $params['password'],
]]);
Config::set('database.default','on_fly');
return DB::reconnect();
但这对我不起作用,因为代码仅适用于当前的 reuest,一旦这个 reuest 完成,系统会自动将默认数据库设置回系统。任何人都可以建议我一个好的方法或实现,我可以考虑实现要求。
提前致谢
解决方案
尝试在服务提供商启动方法中添加代码并告诉我它是否有效?而是替换现有的连接模板,尝试在运行时创建一个新的连接配置,并使用您的 tenant_id 前缀命名连接模板,这是合适的并且肯定会起作用,例如:
$config['database'] = $tenant->database_name;
$config['username'] = $tenant->database_username;
$config['password'] = $tenant->database_password;
Config::set('database.connections.tenant_'.$tenant->id, $config);
Config::set('database.default', 'tenant_'.$tenant->id);
DB::reconnect('tenant');
您也可以参考这篇文章,它可能会有所帮助,您也可以在文章下方的评论中寻求您的支持, https://www.techalyst.com/links/read/139/laravel-database-per-user-on -the-fly-database-connections-multi-tenant-laravel-app-user-own-db
推荐阅读
- python - 在 Python 3.7.9 中使用 opencv 和 mediapipe 制作手部跟踪模块时出错
- c# - C# 列表
到 DataFrame (Microsoft.Data.Analysis.DataFrame) - 将列表加载到 DataFrame - python - 我的请求模块有什么问题?蟒蛇3.82
- javascript - 关闭并重新打开弹出窗口后删除验证错误消息
- python - 'tensorflow.python.framework.ops.EagerTensor' 对象没有属性 'conjugate'
- stm32 - 如何确定使用 FreeRTOS xTaskCreate 创建单个任务所需的 Stackdepth?
- csv - pyspark - 使用自定义行分隔符读取 csv
- uuid - 创建随机帖子 ID 而不是自动递增 - Strapi CMS
- javascript - 无法将日期格式(如 2021 年 10 月 12 日)转换为 Node、js 中的日期
- java - 限制数据库中具有某些值的行