Я пытался использовать несколько транзакций в Doctrine (v1.2.2).Вот мой тест:
// Open a new database connection
$cnx1 = Doctrine_Manager::connection('mydsn'); // $cnx1 will be named '0'
// Open a second database connection
$cnx2 = Doctrine_Manager::connection('mydsn'); // $cnx2 will be named '1'
// Start a transaction on connection #1
$cnx1->beginTransaction();
// Update the name of user #1
$query1 = $cnx1->createQuery();
$query1->update('SfGuardUser')->set("username", "'Name 1'")->where("id='1'");
$query1->execute();
// Start an other transaction on connection #2
$cnx2->beginTransaction();
// Update the name of user #2
$query2 = $cnx2->createQuery();
$query2->update('SfGuardUser')->set("username", "'Name 2'")->where("id='2'");
$query2->execute();
// Commit transaction #2
$cnx2->commit();
(Уровень изоляции по умолчанию - REPEATABLE READ.)
После выполнения кода оба имени пользователя изменились в базе данных.По моему мнению, следует изменить только имя пользователя # 2, поскольку транзакция # 1 еще не была зафиксирована.
При отладке я обнаружил, что это всегда соединение № 2 (последнее открытое)который используется для всех запросов.Зачем ?
В документации Doctrine мы можем прочитать «С самого начала Doctrine была разработана для работы с несколькими соединениями. Если отдельно не указано, Doctrine всегда использует текущее соединение для выполнения запросов».сделать, чтобы использовать разные соединения и уникальные транзакции?