【发布时间】:2015-01-28 15:04:26
【问题描述】:
我正在考虑在我的项目中包含在 composer 依赖项中定义的实体的最佳方式。
由于我想使用 Doctrine CLI 工具来创建实体并使实体与数据库表模式保持同步,因此我需要注册它们的映射。然后我可以打电话:
./vendor/bin/doctrine orm:schema:create
没关系。然后我要生成实体:
./vendor/bin/doctrine orm:generate-entities ./src
但这也会为注册其实体映射的依赖项生成实体,所以我最终得到:
./src/MyPoject/Entity
./src/ProjectDependency/Entity
这可能是个问题,因为./src/ProjectDependency/Entity 重新声明了已经在./vendor/somemone/ProjectDependency/Entity/* 某处定义的类。
有两种方法可以避免这种情况:
在composer.json 中不要使用通用目录自动加载器:
"autoload": {
"psr-0": { "": "src/" }
}
并特别指定我的命名空间:
"autoload": {
"psr-0": { "MyProject\\": "src/" }
}
有了这个orm:generate-entities 仍会在./src 中生成实体,但这些实体不会自动加载,因此不会引发类重新声明错误。
最终,我可以使用--filter 参数:
./vendor/bin/doctrine orm:generate-entities --filter="MyProject" ./src
Doctrine2 将只为我的MyProject 生成实体类。
这让我想到了推荐的方法。也许最好将两者结合起来?
【问题讨论】:
标签: php doctrine-orm