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