2017-04-19 65 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 
     ); 
    } 
} 
相关问题