2017-04-19 59 views
1

我想使用主體實體管理器創建PHP包。如何將現有PDO對象注入主體實體管理器

該軟件包將用於我公司的不同項目,有些項目不使用原則,而是PDO連接。

我希望能夠通過現有的獨立PDO對象在我的包中實例化一個學說實體管理器,因爲我不想(也不能)創建另一個數據庫連接。我必須使用現有的。

這是一種方法嗎?例如:

$ 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 
     ); 
    } 
} 
相關問題