Doctrine 2如何在运行时设置实体表名称(Zend 2)

时间:2013-04-07 21:22:42

标签: doctrine-orm zend-framework2 scalability

我正在使用Zend 2和Doctrine 2构建产品,它要求每个用户都有一个单独的表来包含他们独有的数据。我已经创建了一个实体,用于定义该表的外观,但是如何更改表的名称以便在运行时将数据保留到或实际上从中检索数据?

或者,我会更好地为每个用户提供他们自己的数据库,只是更改我连接的数据库?

2 个答案:

答案 0 :(得分:1)

我首先质疑设计选择。如果在运行时之后创建新用户会发生什么。必须先创建表吗?此外,你存储了什么样的数据,对我而言,这听起来像一个非常常见的多客户端功能。像:

tbl_clients    
- id
- name

tbl_clientdata
- client_id
- data_1_value
- data_2_value
- data_n_value

答案 1 :(得分:0)

如果您真的想要孤立用户数据,则必须使用单独的数据库路径。但这只有在每个“用户”真正相互独立时才有效。对此非常认真。

如果您正在构建某种软件即服务,并且用户A和用户B只是您的两个不同客户,彼此没有关系,那么N + 1数据库可能是合适的(每个N个用户都有一个数据库,另外还有一个“元”数据库,它只保存用户帐户(可能还有计费相关的东西)。

我在ZF2 / Doctrine2中实现了类似的东西,并不是非常糟糕。您只需为EntityManager创建一个工厂,该工厂查找任何活动用户的数据库信息,并配置EM以连接到它。唯一让它变得有点棘手的地方是当你发现自己编写某种共享作业队列时,长时间运行的工作人员需要有规律地切换数据库连接 - 但这也是可行的。