【问题标题】:Symfony3 - multiple Entity Managers and ConnectionsSymfony3 - 多个实体管理器和连接
【发布时间】:2016-09-17 22:42:14
【问题描述】:

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

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] 名为“forMapping”的 Doctrine ORM 管理器不存在。

清空缓存,但没有。任何帮助表示赞赏。

MC

【问题讨论】:

  • 删除 auto_mapping 行。

标签: php doctrine-orm symfony


【解决方案1】:

抱歉,我之前的回答搞砸了。 你不如试试这样的命令:

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

这有什么不同吗?我使用 --help 从命令行中看到,它按该顺序显示。

【讨论】:

  • 有趣的建议。鉴于实体是使用 import 命令生成的,并且 import 命令未运行,那么您将如何检查这些不存在的实体?以及为什么在使用yaml映射选项的时候会有注解?
  • 我才意识到我搞砸了。感谢@Cerad 的提示!
【解决方案2】:

[已解决] 是由于“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 原则:mapping:import "AppBundle" yml --em=forMapping

弹出如下错误信息:

[Symfony\Component\Debug\Exception\ContextErrorException]
警告:preg_match():分隔符不能是字母数字或反斜杠

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

schema_filter: ~^spip_rubriques$~

我的实体已正确生成。谢谢大家的帮助。

MC

【讨论】:

  • 那么doctrine:mapping:import 选项的顺序很重要吗?您可以单击我答案上的向上三角形以表示我(以某种方式)提供帮助吗?
【解决方案3】:

看起来您的“forMapping”在

中不正确
orm:
    entity_managers:
        #problem here
        forMapping:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2016-12-19
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多