在doctrine配置级别设置autocommit off

时间:2017-12-02 11:46:49

标签: php doctrine phpunit

我知道我可以在mysql级别关闭它作为其配置的一部分。这是限制为每个实例一次,我不想打开和关闭/引入docker绕过它。

但是,我想在配置级别指定它,即在实例化对象时传递给doctrine的数组中,所以我可以有一个配置在PHP运行结束时回滚:

Additional information: There was an error deserializing the object of type Notifications.Contracts.ListCommands. Encountered unexpected character 'ï'.

我能想到的最好的方法是抓住实体管理器并在 $conn = array( 'driver' => 'pdo_sqlite', 'path' => __DIR__ . '/db.sqlite', 'autocommit' => false // <- Does this exist? ); $entityManager = EntityManager::create($conn, $config); setUp()函数中关闭自动提交,最好不要记得这样做或指定全球。那,我可以在phpunit之外进行临时操作并获得自动回滚。

2 个答案:

答案 0 :(得分:1)

未经测试,但您可以尝试以下

$db = new PDO('sqlite:dogsDb_PDO.sqlite', $user, $pass, array(
    PDO::ATTR_AUTOCOMMIT => false
));

$config = new \Doctrine\DBAL\Configuration();
$connectionParams = array(
    'dbname' => 'mydb',
    'user' => 'user',
    'password' => 'secret',
    'host' => 'localhost',
    'pdo' => $db,
);
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
$entityManager = EntityManager::create($conn, $config);

来源/ simillar问题 - https://github.com/doctrine/dbal/issues/2315

答案 1 :(得分:0)

您可以执行以下操作:

/** @var EntityManagerInterface */
private $em;

public function setUp()
{
   // initialize the entity manager in some manner .....
   $this->em->beginTransaction();
}


public function tearDown()
{
   $this->em->rollback();
}

希望这个帮助