PHPackages                             ray/doctrine-orm-module - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. ray/doctrine-orm-module

ActiveLibrary[Database &amp; ORM](/categories/database)

ray/doctrine-orm-module
=======================

doctrine/orm module for Ray.Di

1.5.0(9y ago)12761MITPHPPHP &gt;=5.6

Since Jan 16Pushed 9y ago1 watchersCompare

[ Source](https://github.com/ray-di/Ray.DoctrineOrmModule)[ Packagist](https://packagist.org/packages/ray/doctrine-orm-module)[ RSS](/packages/ray-doctrine-orm-module/feed)WikiDiscussions 1.x Synced 1w ago

READMEChangelogDependencies (7)Versions (7)Used By (0)

Ray.DoctrineOrmModule
=====================

[](#raydoctrineormmodule)

[![Scrutinizer Code Quality](https://camo.githubusercontent.com/606a4a09b195370021eaab1342a4e74da7fa437f7308393a0e850ab26d2e40a6/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6b6177616e616d697975752f5261792e446f637472696e654f726d4d6f64756c652f6261646765732f7175616c6974792d73636f72652e706e673f623d312e78)](https://scrutinizer-ci.com/g/kawanamiyuu/Ray.DoctrineOrmModule/?branch=1.x)[![Code Coverage](https://camo.githubusercontent.com/4701a7f64e60388c2dd61e358d9f32092db5777c5d7477ab12159599e6d42147/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6b6177616e616d697975752f5261792e446f637472696e654f726d4d6f64756c652f6261646765732f636f7665726167652e706e673f623d312e78)](https://scrutinizer-ci.com/g/kawanamiyuu/Ray.DoctrineOrmModule/?branch=1.x)[![Build Status](https://camo.githubusercontent.com/aca098ad95238c7cbbd8982a604fdc9236021d0aee978d8666ee327ec29e8103/68747470733a2f2f7472617669732d63692e6f72672f6b6177616e616d697975752f5261792e446f637472696e654f726d4d6f64756c652e7376673f6272616e63683d312e78)](https://travis-ci.org/kawanamiyuu/Ray.DoctrineOrmModule)[![Packagist](https://camo.githubusercontent.com/6deefc1ba408cbb2870886edde451faf9be3762e1123bb47ddda741ff9caceb1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7261792f646f637472696e652d6f726d2d6d6f64756c652e7376673f6d61784167653d33363030)](https://packagist.org/packages/ray/doctrine-orm-module)[![Packagist](https://camo.githubusercontent.com/e03a679535b6e5ff9e0b057a5950fa2fe04a452dbb57934cdeb4b1a181508e59/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7261792f646f637472696e652d6f726d2d6d6f64756c652e7376673f6d61784167653d33363030)](https://github.com/kawanamiyuu/Ray.DoctrineOrmModule/blob/1.x/LICENSE)

A [Doctrine ORM](https://github.com/doctrine/doctrine2) Module for [Ray.Di](https://github.com/ray-di/Ray.Di)

Installation
------------

[](#installation)

### Composer install

[](#composer-install)

```
$ composer require ray/doctrine-orm-module
```

### Module install

[](#module-install)

```
use Ray\Di\AbstractModule;
use Ray\DoctrineOrmModule\EntityManagerModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $entityDir = '/path/to/Entity/';

        $params = [
            'driver'   => 'pdo_pgsql',
            'user'     => 'username',
            'password' => 'password',
            'host'     => '127.0.0.1'
            'port'     => '5432',
            'dbname'   => 'myapp_db'
        ];

        $this->install(new EntityManagerModule($params, $entityDir));

        //// OR ////

        $params = [
            'url' => 'postgresql://username:password@127.0.0.1:5432/myapp_db'
        ];

        $this->install(new EntityManagerModule($params, $entityDir));
    }
}
```

Learn more about [the database connection configuration](http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html).

DI trait
--------

[](#di-trait)

- [EntityManagerInject](https://github.com/kawanamiyuu/Ray.DoctrineOrmModule/blob/1.x/src/EntityManagerInject.php) for `Doctrine\ORM\EntityManagerInterface` interface

Transaction management
----------------------

[](#transaction-management)

First, install `TransactionalModule`.

```
use Ray\Di\AbstractModule;
use Ray\DoctrineOrmModule\EntityManagerModule;
use Ray\DoctrineOrmModule\TransactionalModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new EntityManagerModule($params, $entityDir));

        $this->install(new TransactionalModule); // entityManager->...;
    }

    public function bar()
    {
        // transaction is active
        $this->entityManager->...;
    }
}
```

The method marked with `@Transactional` is executed in a transaction.

```
use Ray\DoctrineOrmModule\Annotation\Transactional;
use Ray\DoctrineOrmModule\EntityManagerInject;

class UserService
{
    use EntityManagerInject;

    /**
     * @Transactional
     */
    public function foo()
    {
        // transaction is active
        $this->entityManager->...;
    }

    public function bar()
    {
        // transaction is not active
        $this->entityManager->...;
    }
}
```

Generating Proxy classes (for production)
-----------------------------------------

[](#generating-proxy-classes-for-production)

Proxy classes improve the performance in a production environment. If you bind `ProxyDir`, proxy classes are automatically generated into the directory when they are used the first time.

```
use Ray\Di\AbstractModule;
use Ray\DoctrineOrmModule\Annotation\ProxyDir;
use Ray\DoctrineOrmModule\EntityManagerModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->bind()->annotatedWith(ProxyDir::class)->toInstance('/path/to/proxy'); // install(new EntityManagerModule($params, $entityDir));
    }
}
```

Learn more about [the Proxy Object](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/advanced-configuration.html#proxy-objects).

Logging queries
---------------

[](#logging-queries)

If you want to log queries, you additionally need to bind `Psr\Log\LoggerInterface` and install `SqlLoggerModule`.

```
use Monolog\Logger;
use Psr\Log\LoggerInterface;
use Ray\Di\AbstractModule;
use Ray\DoctrineOrmModule\EntityManagerModule;
use Ray\DoctrineOrmModule\SqlLoggerModule;
use Ray\DoctrineOrmModule\TransactionalModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new EntityManagerModule($params, $entityDir));
        $this->install(new TransactionalModule);

        $this->bind(LoggerInterface::class)->toInstance(new Logger('myapp')); // install(new SqlLoggerModule); //
