# How to setup multiple database connection using doctrine on Expressive?

**URL:** https://discourse.laminas.dev/t/how-to-setup-multiple-database-connection-using-doctrine-on-expressive/405
**Category:** Mezzio
**Tags:** expressive
**Created:** [December 20, 2017, 5:43pm UTC](https://discourse.laminas.dev/t/how-to-setup-multiple-database-connection-using-doctrine-on-expressive/405 "2017-12-20T17:43:45Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![farhan](https://avatars.discourse-cdn.com/v4/letter/f/b2d939/32.png) [@farhan](https://discourse.laminas.dev/u/farhan)
#### Post date: [December 20, 2017, 5:43pm UTC](https://discourse.laminas.dev/t/how-to-setup-multiple-database-connection-using-doctrine-on-expressive/405/1 "2017-12-20T17:43:46Z")

</div>

Hi, I’ve been trying to make a restful api using Expressive. I need a multiple database connection on my project. And I tried Doctrine, but it seems that Doctrine only support single database connection?  
This is my doctrine configuration:

```
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;

return [
    'doctrine' => [
        'connection' => [
            'orm_default' => [
                'params' => [
                    'url' => 'pgsql://postgres:postgres@localhost/db1'
                ]
            ],
            'orm_db2' => [
                'params' => [
                    'url' => 'pgsql://postgres:postgres@localhost/db2'
                ]
            ],
            'orm_db3' => [
                'params' => [
                    'url' => 'pgsql://postgres:postgres@localhost/db3'
                ]
            ]
        ],
        'driver' => [
            'orm_default' => [
                'class' => MappingDriverChain::class,
                'drivers' => [
                    'App\Entity' => 'my_entity',
                ]
            ],
            'orm_db2' => [
                'class' => MappingDriverChain::class,
                'drivers' => [
                    'App\Entity' => 'my_entity',
                ]
            ],
            'orm_db3' => [
                'class' => MappingDriverChain::class,
                'drivers' => [
                    'App\Entity\DB3' => 'db3_entity',
                ],
            ],
            'my_entity' => [
                'class' => AnnotationDriver::class,
                'cache' => 'array',
                'paths' => __DIR__. '/../../src/App/Entity'
            ],
            'db3_entity' => [
                'class' => AnnotationDriver::class,
                'cache' => 'array',
                'paths' => __DIR__. '/../../src/App/Entity/DB3'
            ]
        ],
    ]
];

```

And this is my factories:

> ```
> /*...*/
> 'doctrine.entity_manager.orm_default' => \ContainerInteropDoctrine\EntityManagerFactory::class,
> 'doctrine.entity_manager.orm_db2' => \ContainerInteropDoctrine\EntityManagerFactory::class,
> 'doctrine.entity_manager.orm_db3' => \ContainerInteropDoctrine\EntityManagerFactory::class,
> 
> ```

```
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null) {
        $db1Em = $container->get('doctrine.entity_manager.orm_default'); //works
        $db2Em = $container->get('doctrine.entity_manager.orm_db2'); // doesn't return db
        $db3Em = $container->get('doctrine.entity_manager.orm_db3'); // doesn't return db
        return new ApiInquiryAction($db1Em, $db2Em, $db3Em);
    } 

```

When I called it using container, only the ‘doctrine.entity\_manager.orm.default’ that works. ‘orm\_db2’ and ‘orm\_db3’ doesn’t return entity manager. Did I not configured it correctly or doctrine doesn’t support multiple database connection?

---

<div class="post-metadata">

### Author: ![xtreamwayz](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/xtreamwayz/32/27_2.png) [@xtreamwayz](https://discourse.laminas.dev/u/xtreamwayz)
#### Post date: [December 21, 2017, 7:37am UTC](https://discourse.laminas.dev/t/how-to-setup-multiple-database-connection-using-doctrine-on-expressive/405/2 "2017-12-21T07:37:38Z")

</div>

Looks like you are missing the `$configKey`. Have a look at this example: [https://github.com/DASPRiD/container-interop-doctrine#configuration](https://github.com/DASPRiD/container-interop-doctrine#configuration)

```auto
return [
    'dependencies' => [
        'factories' => [
            'doctrine.entity_manager.orm_default' => \ContainerInteropDoctrine\EntityManagerFactory::class,
            'doctrine.entity_manager.orm_other' => [\ContainerInteropDoctrine\EntityManagerFactory::class, 'orm_other'],
        ],
    ],
];

```

---

<div class="post-metadata">

### Author: ![farhan](https://avatars.discourse-cdn.com/v4/letter/f/b2d939/32.png) [@farhan](https://discourse.laminas.dev/u/farhan)
#### Post date: [December 24, 2017, 9:22am UTC](https://discourse.laminas.dev/t/how-to-setup-multiple-database-connection-using-doctrine-on-expressive/405/3 "2017-12-24T09:22:14Z")

</div>

Thanks for the answers. It works now. 😁

---

<div class="post-metadata">

### Author: ![Greg\_Bell](https://avatars.discourse-cdn.com/v4/letter/g/bcef8e/32.png) [@Greg\_Bell](https://discourse.laminas.dev/u/Greg_Bell)
#### Post date: [December 27, 2017, 7:21am UTC](https://discourse.laminas.dev/t/how-to-setup-multiple-database-connection-using-doctrine-on-expressive/405/4 "2017-12-27T07:21:55Z")

</div>

Whoa, what’s this dependency on ContainerInteropDoctrine?

I thought doctrine-module supported this already: [https://github.com/doctrine/DoctrineORMModule/blob/master/docs/configuration.md#how-to-use-two-connections](https://github.com/doctrine/DoctrineORMModule/blob/master/docs/configuration.md#how-to-use-two-connections)

(though the single-connection code example doesn’t seem to support that heading text).

---

<div class="post-metadata">

### Author: ![xerkus](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/xerkus/32/22_2.png) [@xerkus](https://discourse.laminas.dev/u/xerkus)
#### Post date: [December 27, 2017, 8:15am UTC](https://discourse.laminas.dev/t/how-to-setup-multiple-database-connection-using-doctrine-on-expressive/405/5 "2017-12-27T08:15:36Z")

</div>

@Greg_Bell ContainerInteropDoctrine is a PSR container provider that can be used anywhere while orm module is a zend-mvc module and requires mvc application bootstrap to be properly configured.
