在过去的几年中,我开发了一个非常定制的PHP/MySQL应用程序,用于许多客户端。到目前为止,我一直在为每个客户机创建一个新的数据库和新的安装。
这里的第一个明显的问题是使多个安装与任何代码更改保持最新;第二个问题是,每个安装都有大量用户;对于大多数客户端;其中一些用户是相同的--他们必须有许多独立的用户帐户和urls才能记住。
目前,我正在将应用程序移到Laravel 5,并研究多租户的最佳实现;因此,请提供一些关于最佳实现的建议。我以前用过拉拉维尔,但绝不是专家。
这是我的想法,就像设置一样。
1主数据库,保存用于:的表
然后,为每个安装提供一个单独的数据库,其中包含该安装所需和提交给该安装的所有信息。。
理想的设置是用户可以进入子域,即installationname.appname.com;使用主登录详细信息登录并自动进入所需的安装;或转到appname.com,登录,然后选择要连接到的安装。
我的问题是:
我相信有很多问题我没有想到,但如果有人有任何联系或指导,可能会有帮助,这将是很好的。第一次问这样的问题,但在过去这里发现了大量的研究帮助,所以感谢社区!
更新-所以我想我现在有一种方法来使这个工作;使用上面所述的独立数据库;设置
protected $connection = 'tenant_connection'在模型中与租户相关的特定数据库内容。
然后,在头文件中的某个位置,根据已在登录/by子域上设置的会话变量设置所需的tenant_connection。
$tenant = Installation::where('installation', '=', $session['installation'])->first();
Config::set('database.connections.tenant_connection', array('driver' => 'mysql', 'host' => $tenant->db_hostname, 'username' => $tenant->db_username)... etc.假设关系将跨连接工作;我不明白为什么这不起作用;只是需要找到设置租户连接的最佳位置。
发布于 2016-06-04 12:57:51
最后我要做的是拥有所有的用户信息、安装的名称以及用户可以访问一个数据库中的安装的映射,以及单独数据库中的所有租户信息。
然后我有两个连接,mysql和mysql_tenant;其中mysql_tenant数据库不是预先设置的,而是动态的。
用户、安装和映射模型使用mysql连接,其他所有使用mysql_tenant。
为每个安装创建一个代码,并将其用作租户数据库的名称;将此代码存储在会话中。
使用中间件MultiTenant,使用以下关键行控制安装之间的切换:
$tenant_id = session()->get('tenant');
\Config::set('database.connections.mysql_tenant.database', $dbname);
\DB::setDefaultConnection('mysql_tenant');对于构建切换等的方法,还有很多,但这就是要点。
发布于 2015-03-09 12:42:36
这是很难回答你的大部分问题-因为它是特定于你的应用程序和意见为基础。
但我能回答的一点是,不同的模型可以有不同的数据库连接。因此,您的user模型使用了正常的默认连接--但是其他模型可以使用另一个连接:
class Example extends Model {
protected $connection= 'second_db_connection';
}然后,在您的DB连接文件中-您将得到如下内容:
return array(
'connections' => array(
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database1',
'username' => 'user1',
'password' => 'pass1'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'second_db_connection' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database2',
'username' => 'user2',
'password' => 'pass2'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),发布于 2015-03-09 12:43:21
Laravel 5是足够先进的,你应该能够有一个简单的安装与一个战略数据库,与明确的关系和钥匙。很少需要多个数据库。
如果你能对你的需求更加具体,我可以提供一个更具体的答案。
https://stackoverflow.com/questions/28942145
复制相似问题