2017-04-19 9 views
1

doctrineエンティティマネージャを使用してPHPパッケージを作成したいとします。既存のPDOオブジェクトを教義エンティティマネージャに注入する方法

このパッケージは私の会社のさまざまなプロジェクトで使用され、一部のプロジェクトではdoctrineではなくPDO接続が使用されています。

既存のスタンドアロンのPDOオブジェクトを使用してパッケージ内のDoctrine Entity Managerをインスタンス化できるようにしたいのですが、別のDB接続を作成したくないからです。私は既存のものを使用しなければならない。

これを行う方法はありますか?次のようなものがあります。

$ em = EntityManager :: createWithPDOInstance($ pdoObject);

ありがとうございました

答えて

1

まあ、自分で解決策を見つけました。

私はコードを投稿して、将来的に誰かを助けるかもしれません。

<?php 

namespace MyProject\Factory; 

use Doctrine\Common\Annotations\AnnotationReader; 
use Doctrine\Common\Annotations\AnnotationRegistry; 
use Doctrine\DBAL\DriverManager; 
use Doctrine\ORM\Configuration; 
use Doctrine\ORM\EntityManager; 
use Doctrine\ORM\Mapping\Driver\AnnotationDriver; 

class EntityManagerFactory 
{ 
    /** 
    * @param \PDO $pdo 
    * @return EntityManager 
    */ 
    public function create(\PDO $pdo) 
    { 
     $config = new Configuration(); 
     $config->setProxyDir(__DIR__ . '/EntityProxy'); 
     $config->setProxyNamespace('EntityProxy'); 
     $config->setAutoGenerateProxyClasses(true); 

     AnnotationRegistry::registerFile(__DIR__ . '/../../vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'); 

     $config->setMetadataDriverImpl(new AnnotationDriver(
      new AnnotationReader(), 
      array(__DIR__ . '/') 
     )); 

     return EntityManager::create(
      DriverManager::getConnection(
       [ 
        'driver' => 'pdo_' . $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME), 
        'pdo' => $pdo, 
       ], 
       $config), 
      $config 
     ); 
    } 
} 
関連する問題