1

2 つの異なるデータベースと通信するアプリがあります。エンティティの 1 つでSchool、次のエラーが発生します。

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'pressbox.schools' doesn't exist

がないので、それは理にかなっていpressbox.schoolsます。ですfnt.schools。間違ったデータベースと通信しようとしています。

使用するマッピングをエンティティに伝えるにはどうすればよいですか? もちろん、環境によって異なる可能性があるデータベース名自体よりもマッピングを参照したいと思います。

4

2 に答える 2

2

まず、構成ファイルで接続を宣言します ( config.ymlで問題ありません)。

doctrine:
  dbal:
    default_connection: pressbox # change it as you wish
    connections:
      pressbox:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   pressbox
        user:     pressbox_usr
        password: pressbox_pwd
        charset:  UTF8
      fnt:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   fnt
        user:     fnt_usr
        password: fnt_pwd
        charset:  UTF8

次に、エンティティ マネージャーを宣言します。

doctrine:
  orm:
    default_entity_manager: pressbox
    entity_managers:
      pressbox:
        connection: web
      fnt:
        connection: fnt

これで、コントローラーで、Doctrine に名前を渡すことで、どのエンティティーマネージャーを使用するかを伝えることができますgetEntityManager():

$fntEm = $this->getDoctrine()->getEntityManager('fnt');

fntテーブルのエンティティ マネージャが同じ名前であると仮定します。

于 2012-06-12T20:24:25.787 に答える
0

データベース間の関係はかなり複雑であるか、プラグインを介して手動でコーディングする必要があると思います。

私はあなたを助けるかもしれない同じトピックについてこの質問を見つけました:

Doctrine2 と Zend フレームワークでの複数のデータベース接続

于 2012-06-18T17:03:55.340 に答える