Symfony3 - 多个实体管理器和连接

时间:2016-09-17 22:42:15

标签: php doctrine-orm symfony

我尝试从预先存在的数据库中的表创建实体:

php bin/console doctrine:mapping:import --force AppBundle yml --filter="someTable"

但是有消息显示:

  

表someTable没有主键。学说不支持逆向   从没有主键的表格中进行工程设计。

我检查过,在数据库中,有一些表没有任何PK(我不能改变它)。 所以我读了这页:http://symfony.com/doc/current/doctrine/multiple_entity_managers.html ...并在github上尝试了这个解决方案: https://github.com/doctrine/DoctrineBundle/issues/441

我的config.yml是这样的:

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                mapping_types:
                    enum: string
            forMapping:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                schema_filter: someTable

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                mappings:
                    AppBundle:
                        type: yml
                        dir: Resources/config
            forMapping:
                connection: forMapping
                mappings:
                    AppBundle:
                        type: yml
                        dir: Resources/config

但是当我尝试时:

php bin/console doctrine:mapping:import --em=forMapping --filter="someTable" AppBundle yml

我明白了:

  

[InvalidArgumentException] Doctrine ORM Manager命名为" forMapping"不存在。

清空缓存,但不是。任何帮助表示赞赏。

MC

3 个答案:

答案 0 :(得分:1)

抱歉,我对之前的回答进行了嘲讽。 你怎么样尝试这样的命令:

php bin/console doctrine:mapping:import "AppBundle" yml --em=forMapping --filter="someTable"

它有所作为吗?我从命令行看到使用--help,它按顺序显示。

答案 1 :(得分:0)

[已解决]是由于“auto_mapping”造成的。正确的顺序似乎是:

orm:
    default_entity_manager: default
    entity_managers:
        auto_mapping: true
        default:
            connection: default
            mappings:
                AppBundle:
                    type: yml
                    dir: Resources/config
        # See https://github.com/doctrine/DoctrineBundle/issues/441
        forMapping:
            connection: forMapping
            mappings:
                AppBundle:
                    type: yml
                    dir: Resources/config

它向下一个错误消息更进一步。当我尝试:

php bin / console doctrine:mapping:import“AppBundle”yml --em = forMapping

弹出以下错误消息:

  

[Symfony的\元器件\调试\异常\ ContextErrorException]
  警告:preg_match():分隔符不能是字母数字或反斜杠

好的,让我们看看。 schema_filter错了。正确的代码是:

schema_filter: ~^spip_rubriques$~

我的实体已正确生成。我感谢你们的帮助。

MC

答案 2 :(得分:-1)

中的“forMapping”看起来不正确
orm:
    entity_managers:
        #problem here
        forMapping:

试着找出这里出了什么问题