【问题标题】:Multi-tenant application with Propel ORM使用 Propel ORM 的多租户应用程序
【发布时间】:2016-12-24 14:03:42
【问题描述】:

我目前是一个多租户应用程序的开发人员,其中有一个“主”数据库,它保存客户的数据并用作模板,即为每个新客户复制不同的名称, 来保存它的数据。

在 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 重复,我想解释一下为什么它不同:

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

【问题讨论】:

标签: php multi-tenant propel2


【解决方案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>
  ...

这将包括来自master-db.xml 文件的database 文档元素的所有子元素。

只是您正在寻找的混合。

好消息:Propel2 现在支持此功能,该功能已在以下位置引入:

【讨论】:

  • 如果这得到实施,那真的是我想要的!这也证实了,到目前为止,我还需要复制整个 XML 文件,对吧?
  • 是的,但是您可以将流程外部化并使用一些 PHP 脚本来概括 propel.xml 文档。
  • @MatteoTassinari:现在已经登陆 Propel2,github.com/propelorm/Propel2/commit/…
猜你喜欢
  • 1970-01-01
  • 2018-08-29
  • 2011-05-05
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 2014-07-18
相关资源
最近更新 更多