【问题标题】:Zend framework 2 and Doctrine 2 database generation from entitiesZend 框架 2 和 Doctrine 2 从实体生成数据库
【发布时间】:2014-01-30 11:35:01
【问题描述】:

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

示例设置

  • Zend 框架 2
  • DoctrineORMM 模块
  • 教义

模块

  • 用户

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

用户和组之间的关系 1 -> many or 1 -> 1

应用程序 1

使用模块用户和组

应用 2

使用模块用户而不是组。

是否可以使用在实体不存在时将被删除的原则注释来描述用户和组之间的关系?

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

【问题讨论】:

  • 为什么要使用同一个类?如果您有不同的关联,它们确实是不同的实体。您可以扩展 User 类并在 GroupUser 类中定义组关系。
  • 没错,但是我试图了解我是否“可以”在一个(实体)中做到这一点,并根据当前配置中实际存在的关系修改关系。

标签: php doctrine-orm annotations zend-framework2


【解决方案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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    相关资源
    最近更新 更多