我正在使用Symfony3,Doctrine和PostgreSQL构建多租户应用程序。
我希望每个实体都有两个主键:tenantId
和entityId
。这样,每个租户都有一个id为1的数据。
所以,用户' Xyz'来自帐篷1的是http://example.com/users/1,用户' Zzz'从租户2也是http://example.com/users/1。 tenantId存储在会话中,因此它没有在URL中表示(是的,我知道这是不正确的RESTful)。
我已经知道如何使用Doctrine处理复合键,在所有字段中添加@Id注释,但我不知道如何生成这些ID。
是否有任何自动方式可以解决此问题,或者我需要在Doctrine中创建自定义生成器并使用MAX(id) + 1
找到给定实体的WHERE tenantId = :TENANT_ID
?
感谢您的帮助。
我正在寻找的例子:
租户表:
tenantId | tenantName
1 |第一家公司
2 |第二家公司
用户表:
tenantId | userId |用户名
1 | 1 | Foo Bar先生
1 | 2 | Bar Foo夫人
2 | 1 | John Doe先生
2 | 2 | Mary Doe夫人
正如您所看到的,用户的主要关键是' table是一个复合键(tenantId
,userId
)。我正在寻找的是一种简单的自动化方法来生成userId
。在只有PK的表中,此方法可以是简单的生成器或SERIAL字段,但由于这是复合PK,我需要userId
值取决于tenantId
字段。