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

时间:2012-12-07 15:11:19

标签: php symfony doctrine-orm entity

好的,我的教义最后一个问题是:generate:entities命令

我运行以下命令,我在

中获得了预期的文件
/src/MyNamespace/Bundle/MyNamespaceBundle/Resources/config/doctrine/metadata/orm

comamnd:

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. 

这是my_manager(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. 我该如何解决?
  3. 相关问题:

    更新#1:

    好的,我将第二个命令作为annotation而不是yml运行,文件生成于:

    MyNamespace\Bundle\MyNamespaceBundle\Entity
    

    命令:

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

    我运行了学说:生成:实体(双向)并且仍然有错误。我决定将文件移到这个目录

    MyNamespace\Bundle\MyNamespaceBundle\Entity\Reports
    

    我运行了学说:生成:实体agin(两种方式)并且仍然有错误。 我查看了文件中的命名空间,看到它指向了工作命名空间。我更新了:

    MyNamespace\Bundle\MyNamespaceBundle\Entity\TblReports
    

    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"
    

    所以我猜问题#3是:

    1. 如何获取第二个命令以在导入时添加正确的命名空间?
    2. 我尝试了这个,但没有骰子

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

      文档:

      来源:

1 个答案:

答案 0 :(得分:0)

你的第一行需要以:结尾:

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

您似乎将注释与yml混合。选择一个并坚持下去。我不使用注释,所以其余的是yml注释。 doctrine:mapping:import / convert with yml选项生成yml文件将yml文件放在Bundle / Resources / config / doctrine中。

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