2016-09-17 58 views
1

我想在一個已經存在的數據庫創建從表中的實體:Symfony3 - 多個實體管理器和連接

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

+0

刪除auto_mapping行。 – Cerad

回答

1

對不起,我愚蠢了我的上一個答案。 你怎麼樣用命令是這樣,而不是:

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

是否有所作爲?我使用--help從命令行看到它按順序顯示。

+1

有趣的建議。鑑於實體是通過使用import命令生成的,並且假定import命令沒有運行,那麼您究竟會如何檢查這些不存在的實體?爲什麼使用yaml映射選項時會有註釋? – Cerad

+0

我剛剛意識到我瘋了。感謝提示@Cerad! –

-1

它看起來像你的「forMapping」是不正確的

orm: 
    entity_managers: 
     #problem here 
     forMapping: 

試圖找出到底是怎麼回事錯在這裏

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斌/控制檯學說:映射:進口 「的appbundle」 陽明--em = forMapping

以下錯誤消息彈出:

[Symfony的\分量\調試\異常\ ContextErrorException]
警告:的preg_match():分隔符不能是字母,數字或反斜線

好吧,讓我們看到了這一點。 schema_filter是錯誤的。正確的代碼是:

schema_filter: ~^spip_rubriques$~ 

我的實體已被正確生成。我感謝大家的幫助。

MC

+0

那麼'doctrine:mapping:import'選項的順序是否重要?你能點擊答案上的三角形來表示我幫助(以某種方式)? –