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

Doctrine orm 原则2如何在运行时设置实体表名(Zend 2),doctrine-orm,zend-framework2,scalability,Doctrine Orm,Zend Framework2,Scalability,我正在用Zend 2和Doctrine 2构建一个产品,它要求我为每个用户提供一个单独的表,以包含他们独有的数据。我已经创建了一个实体来定义该表的外观,但是如何更改表的名称,以便在运行时将数据持久化到或实际上从中检索数据 或者,让每个用户都有自己的数据库,而只是更改连接到哪个数据库,这样会更好吗?首先,我会质疑设计选择。如果在运行后创建新用户,会发生什么情况。必须先创建表吗?此外,您正在存储什么样的数据,对我来说,这听起来像是一种非常常见的多客户端功能。比如: tbl_clients -

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


或者,让每个用户都有自己的数据库,而只是更改连接到哪个数据库,这样会更好吗?

首先,我会质疑设计选择。如果在运行后创建新用户,会发生什么情况。必须先创建表吗?此外,您正在存储什么样的数据,对我来说,这听起来像是一种非常常见的多客户端功能。比如:

tbl_clients    
- id
- name

tbl_clientdata
- client_id
- data_1_value
- data_2_value
- data_n_value

首先我会质疑设计的选择。如果在运行后创建新用户,会发生什么情况。必须先创建表吗?此外,您正在存储什么样的数据,对我来说,这听起来像是一种非常常见的多客户端功能。比如:

tbl_clients    
- id
- name

tbl_clientdata
- client_id
- data_1_value
- data_2_value
- data_n_value

如果您真的想向用户发送数据,那么必须采用单独的数据库路径。但这只有在每个“用户”真正相互独立的情况下才有效。仔细想想

如果您正在构建某种软件即服务,而用户a和用户B只是您的两个不同客户,彼此没有任何关系,那么N+1数据库可能是合适的(N个用户各有一个数据库,加上一个“元”数据库,其中只包含用户帐户(可能还有与计费相关的内容)


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

如果你真的想存储用户数据,你必须走单独的数据库路线。但这只有在每个“用户”真正相互独立的情况下才行。仔细想想

如果您正在构建某种软件即服务,而用户a和用户B只是您的两个不同客户,彼此没有任何关系,那么N+1数据库可能是合适的(N个用户各有一个数据库,加上一个“元”数据库,其中只包含用户帐户(可能还有与计费相关的内容)


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

主要是电子商务数据、产品、订单、客户等。这些数据将通过API访问,因此我不认为运行的流程中没有用户设置Sam是正确的。你肯定不能这样做你想用条令做什么。一个实体必须映射到一个表,正如EntityManager维护和标识映射一样。如果有多个表,你最终会得到两个具有相同id的实体,这将导致可怕的破坏。它主要是电子商务数据、产品、订单、客户等。它将通过API访问,所以我不相信它会被破坏如果正在运行的进程没有用户设置Sam是正确的,则永远不会出现这种情况。您当然不能用条令做您想做的事情。实体必须映射到一个表,正如EntityManager所维护的那样,并且标识映射。对于多个表,您最终会得到两个具有相同id的实体,这将导致出现问题非常可怕。