2014-01-30 106 views
1

是否有可能以模块化方式生成数据库?根据加载哪些模块使实体间的关系可用?Zend Framework 2和Doctrine 2数据库从实体生成

实施例设置

  • Zend框架2
  • DoctrineORMModule
  • 学说

模块

  • 用户

每个模块都有它们管理的相应实体。使用注释进行数据库创建和代理创建。用户和组之间

关系1 - >许多或1 - > 1

应用1

使用模块的用户和组

应用2

使用模块的用户但不是团体。

是否有可能使用原则注释来描述用户和组之间的关系,如果实体不存在,将被移除?

删除或添加的关系时./vendor/bin/doctrine-module ORM:架构工具:创建或./vendor/bin/doctrine-module ORM:架构工具:更新被称为

+0

你为什么要使用同一个类?如果你有不同的关联,他们真的是不同的实体。您可以扩展'User'类并在'GroupUser'类中定义组关系。 – AlexP

+0

然而,我正试图了解我是否可以在一个实体中执行该操作,并根据当前配置中实际存在的关系修改关系。 – rkamstra

回答

1

无,如果未加载模块,则不应删除注释。你应该看待事情的不同。

从应用程序1和应用程序2的设置中可以看出,用户将被安装并且组依赖于用户。请注意,对于应用程序1,取决于组,用户是而不是。这意味着关系为单向:组知道其用户,但用户不知道其组。正如你所说,这种关系也很多:很多。令人惊讶的是,Doctrine有一个叫做many-to-many, unidirectional的关联映射。

唯一的是,您只能通过Group加载用户组。你不能做这样的事情:

$user = $repository->find(1); 
$groups = $user->getGroups(); 

用户不知道的组,因此它不能加载它们。相反,要求组存储库组:

$user = $userRepository->find(1); 
$groups = $groupRepository->findAllByUser($user); 

这将要求组库找到在给定用户相关的所有组。