symfony - 基于 Symfony2 中登录用户的 Doctrine2 动态表前缀

标签 symfony doctrine-orm

我正在尝试建立一个 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/

相关文章:

php - Symfony2 PRE_SET_DATA $event->getData() 返回错误的对象

symfony - Html2Pdf + Symfony + Docker:无法获取图像的大小

php - Symfony2 一次保存两个表单

php - 快速实体主义水化器

php - ORM-ManyToMany 关系中的附加字段

sql - 教义 : Use dash in field alias

php - 如何从 PhpStorm 运行 Symfony Web 服务器

php - Symfony2 - 在 Twig 中获取一个实体而不是 PersistentCollection

symfony2 学说十进制精度刻度注释被忽略

php - Symfony Doctrine 优化