Doctrine 生成实体命名空间的问题?

4

好的,我有一个关于doctrine:generate:entities命令的问题需要解决。

我运行了下面的命令,我得到了预期的文件:

/src/MyNamespace/Bundle/MyNamespaceBundle/Resources/config/doctrine/metadata/orm

命令:

php app/console doctrine:mapping:convert yml ./src/MyNamespace/Bundle/MyNamespaceBundle/Resources/config/doctrine/metadata/orm --from-database --em=my_manager --filter=TblReports --verbose

我看到了 TblReports.orm.yml 文件(或文件集),其第一行是:
TblReports

命令:(这应该是注释而不是yml吗?)

php app/console doctrine:mapping:import MyNamespaceBundle yml --em=my_manager --filter=TblReports

当我运行以上命令时,我在这里得到文件。
/src/MyNamespace/Bundle/MyNamespaceBundle/Resources/config/doctrine/

与第一条命令生成的第一批文件同名,只不过在不同的位置,并且第一行(我假设是命名空间)

TblReports.orm.yml

现在第一行是:

MyNamespace\Bundle\MyNamespaceBundle\Entity\TblReports

但是我认为它需要改进。

MyNamespace\Bundle\MyNamespaceBundle\Entity\Reports\TblReports

现在我运行最后一个命令

php app/console doctrine:generate:entities MyNamespaceBundle --path=src --no-backup

我收到了这个错误。
[RuntimeException]                                                    
  Bundle "MyNamespaceBundle" does not contain any mapped entities.

如果我像这样运行命令

php app/console doctrine:generate:entities MyNamespaceBundle:Reports --path=src --no-backup

我遇到了这个错误(但命名空间看起来是正确的)。
  [RuntimeException]                                                                                   
  Namespace "MyNamespace\Bundle\MyNamespaceBundle\Entity\Reports" does not contain any mapped entities. 

这是我的管理器(config.yml)。
# Doctrine Configuration
doctrine:
    dbal:
      default_connection: my_database
      connections:
        my_database:
          driver:   pdo_pgsql
          port:     5432
          dbname:   tbl_reports
          user:     foo_user
          password: foo_pass
          charset:  UTF8
          mapping_types:
            bit: string

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        default_entity_manager: my_manager
        entity_managers:
            my_manager:
                connection: my_database
                mappings:
                    MyNamespaceBundle:
                      mapping: true
                      dir: Entity/Reports

在config_dev.yml中(我使用dev和prod yml文件来控制我可以连接的主机)
# Doctrine Configuration
doctrine:
    dbal:
      connections:
        my_database:
          host: 172.0.0.1

问题:

  1. 为什么我会收到这个错误?
  2. 我该如何修复它?

相关问题:

更新#1:

好吧,我以注释而不是yml运行了第二个命令,文件生成在以下位置:

MyNamespace\Bundle\MyNamespaceBundle\Entity

命令:

php app/console doctrine:mapping:import MyNamespaceBundle annotation --em=my_manager --filter=TblReports

我运行了doctrine:generate:entities(两种方式),仍然遇到错误。我决定将文件移动到此目录中。
MyNamespace\Bundle\MyNamespaceBundle\Entity\Reports

我再次运行了doctrine:generate:entities(两种方式都试过),但仍然出现错误。 我查看了文件中的命名空间,并发现它指向了工作命名空间。我将其更新为:

MyNamespace\Bundle\MyNamespaceBundle\Entity\TblReports

to

MyNamespace\Bundle\MyNamespaceBundle\Entity\Reports\TblReports

运行此命令

php app/console doctrine:generate:entities MyNamespaceBundle:Reports --path=src --no-backup

并且现在正在运行。
Generating entities for namespace "MyNamespace\Bundle\MyNamespaceBundle\Entity\Reports"

所以我猜第三个问题是:

  1. 第二个命令如何在导入时添加正确的命名空间?

我尝试了这个方法,但没有成功。

php app/console doctrine:mapping:import MyNamespaceBundle:Reports annotation --em=my_manager --filter=TblReports

Docs:

Source:

1个回答

0

你的第一行需要以 : 结尾,例如:

MyNamespace\Bundle\MyNamespaceBundle\Entity\TblReports: 
  <yml> data.

你似乎在混合使用注释和yml。选择一个并坚持使用它。我不使用注释,所以其余部分都是yml注释。doctrine:mapping:import/convert与yml选项一起生成yml文件,并将这些yml文件放置在Bundle/Resources/config/doctrine中。

然后使用yml文件集合来创建实体类,并将它们放置在每个yml文件中指定的位置,默认情况下为NamespaceBundle\Entity。


谢谢,我明白了。如何更改该命名空间?从NamespaceBundle\Entity到NamespaceBundle\Another\Namespace\Entity。 - Phill Pafford
将Doctrine文件放入与该命名空间相关联的目录中,并在那里生成它们? - Lighthart
你能列出所有三个命令吗?我正在尝试你的建议,但是我得到的都是错误。顺序很重要吗? - Phill Pafford
doctrine:mapping:import Bundle ymlphp app/console doctrine:generate:entities MyNamespaceBundle --path=src但是你已经完成了这些。我的理解是Symfony的模型是将报告实体放在自己的bundle中,因此Entity\Reports目录会给你带来麻烦。 - Lighthart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接