我目前正在寻找一种为我们的客户之一在多个Symfony2应用程序之间共享用户的方法。在过去的3年中,我们为它们制作了一些具有不同用途的应用程序(4),但始终使用“相同”的用户模型和数据。
当前,我们有4个独立的数据库,其中“用户”表在所有应用程序上都差不多,除了多对多关系。最初,我在考虑添加第二个实体管理器(和连接),并将用户放在单独的数据库中。所有应用程序都将能够使用它,并且所有用户都将具有相同的凭据。但是,我该如何处理多对多关系?
举个例子,在应用程序A上,从“用户”到“客户”有多对多关系,但是在应用程序B / C / D中不存在“客户”表。在应用程序B上,您具有从“用户”到“供应商”的多对多关系,但是在应用程序A / C / D中不存在“供应商”表,依此类推。将“客户”或“供应商”表移至共享数据库也不是真正的选择,因为其他(未共享的)实体也与这些表有关系。
我基本上需要找到一种方法来映射“共享用户”模型/数据库上的多对多关系,这对于每个应用程序都是唯一的。有没有办法用多个数据库来实现呢?我应该采取其他方法吗?
欢迎所有信息。提前致谢。
使用不同的连接,开箱即用的Doctrine似乎无法实现。
已经回答了类似的问题:
如第一个答案所述,您可以执行以下操作:
通过保存相关对象(旧样式)的标识符而不是对它们的引用来保持对象图的断开连接,然后通过服务手动获取对象。
但是,如果您希望Doctrine实际上了解这些关联,则需要将关联的实体持久保存在同一数据库中,否则您的映射将仅生成错误。这意味着您需要复制User实体。
在非常特定的情况下,您可以使用相同的连接(即,在同一主机上使用同一用户的同一DBMS的多个数据库),似乎有一种方法,但我尚未对其进行测试:https ://techpunch.co.uk/development/using-multiple-databases-with-symfony2-and-doctrine2
这个想法是在每个表的前面加上数据库名称,就像它是一个架构名称一样,如下所示:
该实体映射到数据库“用户”中的“用户”表:
<?php
namespace Demo\UserBundle\Entity;
use DoctrineORMMapping as ORM;
/**
* @ORMTable(name="users.User")
*/
class User
{
/* ... */
}
这一个映射到数据库“ posts”中的“ Post”表:
<?php
namespace Demo\PostBundle\Entity;
use DoctrineORMMapping as ORM;
/**
* @ORMTable(name="posts.Post")
*/
class Post
{
/* ... */
}
然后,您可以像往常一样进行关联:
class Post
{
/**
* @ORM\ManyToOne(targetEntity="\Demo\UserBundle\Entity\User")
**/
private $user;
/* ... */
}
作者还链接到github上的示例项目:https : //github.com/lobsterdore/symfony2-multiple-db-example
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句