从实体生成Zend框架2和Doctrine 2数据库

时间:2014-01-30 11:35:01

标签: php doctrine-orm annotations zend-framework2

是否可以以模块化方式生成数据库?根据加载的模块,使实体之间的关系可用?

示例设置

  • Zend framework 2
  • DoctrineORMModule
  • 学说

模块

  • 用户

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

用户与组1之间的关系 - >许多或1 - > 1

申请1

使用模块用户和组

申请2

使用模块用户但不使用组。

是否可以使用学说注释来描述用户和组之间的关系,如果实体不存在则将其删除?

在./vendor/bin/doctrine-module orm:schema-tool:create或./vendor/bin/doctrine-module orm:schema-tool:update被调用时删除或添加关系

1 个答案:

答案 0 :(得分: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);

这将要求组存储库查找与给定用户相关的所有组。