是否可以以模块化方式生成数据库?根据加载的模块,使实体之间的关系可用?
示例设置
模块
每个模块都有他们管理的相应实体。使用注释进行数据库创建和代理创建。
用户与组1之间的关系 - >许多或1 - > 1
申请1
使用模块用户和组
申请2
使用模块用户但不使用组。
是否可以使用学说注释来描述用户和组之间的关系,如果实体不存在则将其删除?
在./vendor/bin/doctrine-module orm:schema-tool:create或./vendor/bin/doctrine-module orm:schema-tool:update被调用时删除或添加关系
答案 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);
这将要求组存储库查找与给定用户相关的所有组。