使用Propel ORM的多租户应用程序

时间:2016-12-24 14:03:42

标签: php multi-tenant propel2

我目前是多租户应用程序的开发人员,其中有一个" master"数据库,它保存客户的数据,也用作模板,即每个新客户使用不同的名称进行复制,以保存其数据。

在PHP中使用Propel ORM时,模型配置在XML文件中完成,结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<database name="master_db" defaultIdMethod="native">
  <!-- here are tables' definitions -->
</database>

是否可以使用相同的XML文件来建模与所有客户的所有连接。数据库,还是我需要一个单独的文件,除数据库名称外完全相同?

由于我的问题被标记为我之前发现的this one的潜在副本,我想解释它为何与众不同:

  • 在这种情况下,数据库的数量会随时间而变化,而在该问题中则是固定的
  • 在这种情况下,所有数据库和每个数据库中的所有表格都具有完全相同的结构
  • 希望每个客户都有不同的类,而是一组模型类,它们将查询最后选择的数据库

1 个答案:

答案 0 :(得分:1)

您要求的声音是配置文件中XML包含的理想选择:

master-db.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<database name="master_db" defaultIdMethod="native">
  <!-- here are tables' definitions -->
</database>

propel.xml文件一起

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <propel>
    <database name="blueberryshoechamp_db" defaultIdMethod="native">
      <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
                  href="master-db.xml"
                  xpointer="xpointer( /database/* )"
                  />
    </database>
  ...

然后,这将包含database文件中master-db.xml文档元素的所有子元素。

只是你要找的混音。

好消息:Propel2现在支持此功能,该功能在以下版本中引入: