2017-07-26 14 views
1

私はDoctrineでDBALを使ってsymfony 3のデータベースとの接続を行っています。私がしたいのは、コントローラではなく、PHPファイルですべてのクエリを持つことです。PHPファイル内の複数のデータベースに接続するには?

コントローラでは、私はこれを使用することができます。

$conn = $this->get('doctrine.dbal.database2_connection'); 

は、接続を取得するには、単純なPHPで私はできません。

したがって、EntityManagerオブジェクトを使用せずに複数の接続を呼び出す方法がわかりません。なぜなら、私はEntityクラスで作業していないからです。

+1

まず、「シンプルなPHPファイル」はどういう意味ですか、私はSymfony(2と3)の方法論では「単純なPHPファイル」の使用を許可していないと思います。 –

+0

PHPクラスがコントローラとして宣言していないことを意味します。@FabriceKabongo –

+0

サービスの設定と依存性注入を見てください。 – Rufinus

答えて

0

PDOを使用する場合は、すべての接続がオブジェクトとして扱われ、同時に任意の数を持つことができます。あなたは次のことを習得する必要があるにしたいものを達成するためにCheck out the docs

0

  1. あなたはin the documentation(私はそれはあなたが多くの接続によって何を意味するかだと思う)複数のデータベースと連携する方法を確認する必要があります。

  2. はまた、あなたはあなたがあなた自身のクエリを行うためにDQL (doctrine query language)を使用する必要がありますどのようにcreate custom repositories.

  3. 参照する必要があります。

  4. そして最後のポイントは、あなたが既に知っているすべてをスキップすること自由に感じSymfony's dependency injection.

に慣れる必要があるということです。あなたの質問はかなり漠然としているので、私はここですべてを詳述することはできません。だから、この答えは、あなたの解決策を見つける方法や少なくともあなたの質問に焦点を当てる方法を導くでしょう。

0

Symfony複数のデータベースを接続できます。これを達成するには、btトレーニングを行う必要があります。

ステップ#1

parameters.ymlファイルにパラメータを追加します。

Parameters: 

# First database 

  database_host: 127.0.0.1 
  database_port: null 
  database_name: qmsfumgabd 
  database_user: qmsfumgabd 
  database_password: xxx9bxxMxx 

# Second database 

  database2_host: 127.0.0.1 
  database2_port: null 
  database2_name: huscqxzwaw 
  database2_user: huscqxzwaw 
  database2_password: dxxxFXxxxB 

ステップ#2

は、次のステップは、config.ymlでこれらの資格情報を取得することである:

doctrine: 

  # Configure the abstraction layer 

  dbal: 

      # Set the default connection to default 

      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 

         database2: 

               driver:    pdo_mysql 

               host:      '%database2_host%' 

               port:      '%database2_port%' 

               dbname:   '%database2_name%' 

               user:      '%database2_user%' 

               password: '%database2_password%' 

               charset:   UTF8 

ステップ#3

第二のデータベース接続は、以下のパラメータを使用して追加することができます

最後に、プロジェクト内の各バンドルのマッピングを指定します。

# Configure the ORM 

  orm: 

      default_entity_manager: default 

      entity_managers: 

          # Register which bundle should use which connection 

          default: 

              connection: default 

              mappings: 

                  AppBundle:  ~ 

                  DemoBundle: ~ 

          database2: 

              connection: database2 

              mappings: 

                  CloudwaysBundle: ~ 

ステップ#4

今単にエンティティマネージャの使用の接続名のいずれかを呼び出すために:

class UserController extends Controller 

{ 

   public function indexAction() 

   { 

       // All 3 return the "default" entity manager 

       $em = $this->getDoctrine()->getManager(); 

       $em = $this->getDoctrine()->getManager('default'); 

       $em = $this->get('doctrine.orm.default_entity_manager'); 



       // Both of these return the "database2" entity manager 

       $anotherEm = $this->getDoctrine()->getManager('database2'); 

       $anotherEm = $this->get('doctrine.orm.database2_entity_manager'); 

   } 

} 

をまたmultiple databasesのためのsymfonyのドキュメントからの助けを取ることができます。

関連する問題