首页 > 解决方案 > 使用 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 完成,系统会自动将默认数据库设置回系统。任何人都可以建议我一个好的方法或实现,我可以考虑实现要求。

提前致谢

标签: phplaravellaravel-5cloud

解决方案


尝试在服务提供商启动方法中添加代码并告诉我它是否有效?而是替换现有的连接模板,尝试在运行时创建一个新的连接配置,并使用您的 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


推荐阅读