我想使用学说实体管理器创建一个 PHP 包。
这个包会用在我公司不同的项目中,有的项目不是用的学说,而是一个PDO连接。
我希望能够使用现有的独立 PDO 对象在我的包中实例化一个学说实体管理器,因为我不想(而且我不能)创建另一个数据库连接。我必须使用现有的。
这是一种方法吗?就像是:
$em = EntityManager::createWithPDOInstance($pdoObject);
谢谢
好吧,我自己找到了解决方案。
我发布了代码,将来可能会对某人有所帮助。
<?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
);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句