如何处理在composer依赖项中定义的Doctrine2实体

时间:2015-01-28 15:04:26

标签: php doctrine-orm

我在想什么是在我的项目中包含在作曲家依赖项中定义的实体的最佳方式。

由于我想使用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生成实体类。

这让我想到了推荐的方法。也许idealy结合两者?

1 个答案:

答案 0 :(得分:2)

我认为第二种方法是更好的方法。它是一种更清晰,更易于使用的方法。您应该选择--filter选项:

./vendor/bin/doctrine orm:generate-entities --filter="MyProject" ./src