我知道我可以在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之外进行临时操作并获得自动回滚。
答案 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();
}
希望这个帮助