Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Symfony2中登录用户的Doctrine2动态表前缀_Symfony_Doctrine Orm - Fatal编程技术网

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

基于Symfony2中登录用户的Doctrine2动态表前缀,symfony,doctrine-orm,Symfony,Doctrine Orm,我试图获得一个多租户系统设置,其中每个用户都有自己的前缀表 所以我的数据库可能看起来像 users acme_posts my_posts their_posts our_posts 类似这样的解决方案是一个良好的开端,但它不允许动态创建前缀 是否可以修改上述条令解决方案,根据登录用户设置数据库前缀 另一种方法可能是拥有一个主用户数据库,然后为特定于用户的表拥有单独的数据库,但我不确定条令是否能够处理多个数据库之间的关系 欢迎您提出所有建议。您只需将EventListener定义为一个服务,就

我试图获得一个多租户系统设置,其中每个用户都有自己的前缀表

所以我的数据库可能看起来像

users
acme_posts
my_posts
their_posts
our_posts
类似这样的解决方案是一个良好的开端,但它不允许动态创建前缀

是否可以修改上述条令解决方案,根据登录用户设置数据库前缀

另一种方法可能是拥有一个主用户数据库,然后为特定于用户的表拥有单独的数据库,但我不确定条令是否能够处理多个数据库之间的关系


欢迎您提出所有建议。

您只需将EventListener定义为一个服务,就可以很容易地访问Doctrine EventListener中的服务容器。但是,这种方法对您的情况没有帮助,因为所有的类元数据只加载一次并缓存,所以它无法了解不同的用户

显然,我不知道您的用例,但是有什么原因不能简单地向*\u posts表添加一个字段,这样您就有一个带有“user\u namespace”或类似名称的posts表作为键的一部分


如果您的反对意见仅仅是将控制器逻辑与用户登录的信息混为一谈,那么您可以通过使用prePersist Doctrine EventListener在新实体上设置适当的用户名称空间,以及a(对于Doctrine>=2.2)或a(对于其他所有内容)来简化事情将所有查询限制为仅从相应的用户名称空间检索实体。

我不确定是否正确理解“用户名称空间”。您的意思是要有一个posts表,其中包含与users表中的id字段相关的字段吗?我试图避免这种情况,以保持租户数据分离,并将表大小保持在最低限度,但也许这是一种方法…是的,这正是我的意思-我能想到的唯一其他优雅的解决方案是每个用户使用不同的应用程序实例,配置为使用不同的数据库。这很容易做到,但意味着您必须复制所有公共数据(例如用户表),因为据我所知,条令不支持跨数据库关联