如何在php文件中连接多个数据库?

时间:2017-07-26 18:19:56

标签: php symfony symfony-3.2

我正在使用带有Doctrine的DBAL在Symfony 3中建立到数据库的连接。我想做的是将所有查询都放在PHP文件中,而不是放在控制器中。

在控制器中我可以使用它:

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

获取连接,但在简单的PHP中我不能。

所以,我不知道如何在不使用EntityManager对象的情况下调用多个连接,因为我没有使用Entity类。

3 个答案:

答案 0 :(得分:0)

如果使用PDO,则每个连接都被视为一个对象,您可以同时拥有任意数量的连接。 Check out the docs

答案 1 :(得分:0)

为了达到你想要掌握的东西所需要的东西:

  1. 您需要检查如何使用多个数据库(我猜这是多少个连接的含义)in the documentation

  2. 此外,您还需要了解如何create custom repositories.

  3. 您需要使用DQL (doctrine query language)进行自己的查询。

  4. 最后一点是你需要使用Symfony's dependency injection.

  5. 随意跳过您已经知道的一切。我不能在这里详述一切,因为你的问题很模糊。因此,这个答案将指导如何找到您的解决方案或至少集中您的问题。

答案 2 :(得分: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文档中获取帮助。