簡體   English   中英

如何連接到PHP文件中的多個數據庫?

[英]How to connect to multiple db in a php file?

我正在使用DBAL和Doctrine在Symfony 3中建立與數據庫的連接。 我想做的是將所有查詢保存在PHP文件中,而不是在控制器中。

在控制器中,我可以使用以下命令:

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

獲得連接,但是在簡單的PHP中我無法。

因此,我不使用EntityManager對象不知道如何調用多個連接,因為我不使用Entity類。

如果使用PDO,則每個連接均被視為一個對象,並且可以同時具有任意數量的連接。 查看文檔

為了實現您想要掌握的以下內容:

  1. 您需要在文檔中檢查如何使用多個數據庫(我想這是許多連接的意思)。

  2. 另外,您需要了解如何創建自定義存儲庫。

  3. 您將需要使用DQL(原則查詢語言)來進行自己的查詢。

  4. 最后一點是,您需要習慣使用Symfony的依賴項注入。

隨時跳過您已經知道的所有內容。 我無法在這里詳細說明所有問題,因為您的問題很模糊。 因此,此答案將指導您如何找到解決方案,或者至少關注您的問題。

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: ~

第四步

現在,要調用任何實體管理器,只需使用連接名稱即可:

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');

   }

}

您也可以從symfony的文檔中獲取有關多個數據庫的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM