2

我有一个基于 CodeIgniter PHP 的 Web 应用程序,一个 MYSQL 数据库,我们使用 PHPActiveRecords。我们不断发展壮大,现在需要提供带有白标签的应用程序。我已经完成了大部分工作,唯一遇到的问题是如何处理数据库。我不想有两个数据库连接,因为两个站点之间的大量数据将被共享。我研究了 Multitenancy,这听起来是个不错的选择,但是如果我必须重写每个 ActiveRecord 找到的条件,其中的条件是tenant_id = 'this site',然后必须培训我的员工在他们现在编写代码时做同样的事情,它不可扩展。有没有人知道如何 A) 将多租户集成到 PHPActiveRecords 中而无需进行大量修改,或者 B) 比多租户更好的解决方案。

先感谢您。

4

1 回答 1

5

根据您拥有的客户端数量,您可以在一台主机上为每个客户端创建一个模式。使用常用数据库名称为常用表的表名添加前缀,并依靠客户端查询来使用默认数据库。

您的入口点可能会执行以下操作:

$pdo->query('USE client_12345');

您的查询可能类似于:

$pdo->query('SELECT * FROM clientspecificdata WHERE ...');

$pdo->query('SELECT * FROM common.data WHERE ...');

请注意:这会将数据暴露给错误的客户的风险相对较高。确保这适合您的方案。使用多个连接可能会好得多。

于 2013-01-30T19:11:58.950 回答