所以,我正在构建一个应用程序,每个用户都可以登录到个人仪表板。此仪表板显示来自特定数据库的数据。每个用户都有多个数据库,但每个数据库只属于一个用户。用户可以从仪表板创建新数据库(这由后端处理,只提及它以便更好地了解应用程序的工作原理)。最后,还有一个单独的数据库,对于存储用户 - 数据库关系的所有用户都是通用的。
我需要的每个用户都是:
当他们登录时,他们的仪表板显示属于该用户的最新创建的数据库的数据。 然后,用户可以选择他们想要的数据库"查看"从下拉菜单和仪表板内容相应更改。 现在,我对每个用户使用一个数据库(硬编码),但想要添加上述动态元素。
我在这里发现了类似的东西:
但似乎线程中缺少一些答案,因此无法完全遵循它。
每个数据库都具有完全相同的结构,因此只需要一个控制器和模型来动态获取数据库名称的值。
所以我需要的工作流程如下:
我的主要问题是定义将当前数据库名称分配给变量的过程,然后模型使用此变量来设置动态连接,最后调用控制器来检索和显示数据。
这样的流程是否可行,最佳方法是什么?
提前感谢您的帮助!!
答案 0 :(得分:1)
我看到你在这里想做什么,我花了几分钟思考和研究。
看看:https://laracasts.com/discuss/channels/tips/set-up-dynamic-database-connection-globally
这实质上说明你需要在Laravel database.php
文件中有两个MySQL连接配置细节。您的主数据库main
和次连接(在下面的示例中称为tenant
),这是空白的,用于连接到用户特定的数据库。
在应用程序(服务提供商?)的某个位置,你需要设置特定的数据库配置,例如:
Config::set('database.connections.tenant.host', $tenant->host);
Config::set('database.connections.tenant.username', $tenant->username);
Config::set('database.connections.tenant.password', $tenant->password);
Config::set('database.connections.tenant.database', $tenant->database);
然后,您可以在模型中设置受保护的$connection
属性以使用此辅助数据库连接。
class MyModel extends Model {
protected $connection = 'tenant';
}