我负责一个大型遗留Web应用程序,我正在尝试将其慢慢地重构为Symfony2框架。我做的第一件事就是包括Doctrine。
我已经在Composer的帮助下安装了Doctrine,并为它设置了一个bootstrap文件。为了避免将来出现复杂情况,我的实体已经遵循命名空间方案Company\BundleName\Entity\Object
。以下作品:
$em->getRepository('Company\\BundleName\\Entity\\Object')
->find($id)
;
我无法找到任何关于如何通过Symfony2告知Doctrine名称空间别名的参考,所以我可以写
$em->getRepository('CompanyBundleName:Object')
->find($id)
;
代替。我怎样才能做到这一点?
答案 0 :(得分:4)
现在有一种更简单的方法:
$config = Setup::createAnnotationMetadataConfiguration(...);
$config->addEntityNamespace('CompanyBundleName', 'Company\BundleName\Entity');
会做你想要的。我花了好几个小时去找这个!它不在我能找到的任何文档中。
答案 1 :(得分:1)
此功能由DoctrineBridge软件包在Symfony2中设置,特别是getMappingDriverBundleConfigDefaults function。
如果要在没有Symfony2的情况下反映此功能,则需要扩展Doctrine实体管理器并在getRepository函数中自己生成前缀。它不是Doctrine系统的一部分。