我正在尝试获得一个多租户系统设置,其中每个用户都有自己的前缀表。
所以我的数据库可能看起来像
users
acme_posts
my_posts
their_posts
our_posts
像这样的解决方案是一个好的开始,但它不允许动态创建前缀。
是否可以修改上面的学说解决方案以根据登录用户设置数据库前缀?
另一种方法可能是拥有一个主用户数据库,然后为用户特定的表设置单独的数据库,但我不确定 Doctrine 是否可以处理多个数据库之间的关系。
欢迎所有建议。
我正在尝试获得一个多租户系统设置,其中每个用户都有自己的前缀表。
所以我的数据库可能看起来像
users
acme_posts
my_posts
their_posts
our_posts
像这样的解决方案是一个好的开始,但它不允许动态创建前缀。
是否可以修改上面的学说解决方案以根据登录用户设置数据库前缀?
另一种方法可能是拥有一个主用户数据库,然后为用户特定的表设置单独的数据库,但我不确定 Doctrine 是否可以处理多个数据库之间的关系。
欢迎所有建议。
你可以很容易地访问 Doctrine EventListener 中的服务容器,只需将 EventListener 定义为服务(位于此处的说明)。但是,这种方法对您的情况没有帮助,因为所有类元数据将只加载一次并缓存,因此它无法了解不同的用户。
显然,我不知道您的用例,但是有什么理由不能简单地将字段添加到您的 *_posts 表中,这样您就有一个带有“user_namespace”或类似键的帖子表?
如果您的反对只是将控制器逻辑与有关用户登录的信息混淆,您可以通过使用 prePersist Doctrine EventListener 在新实体上设置适当的 user_namespace 和过滤器(对于 Doctrine >=2.2)或自定义 DQL walker(用于其他所有内容),以限制所有查询仅从适当的 user_namespace 检索实体。