2

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

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

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

是否可以使用相同的 XML 文件来为所有客户数据库的所有连接建模,或者我是否需要为每个文件创建一个单独的文件,除了数据库名称之外完全相同?

由于我的问题已被标记为这个问题的潜在重复我之前发现过,我想解释一下为什么它不同:

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

1 回答 1

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 现在支持此功能,该功能被引入:

于 2017-01-01T23:09:28.473 回答