Home > front end >  Get transaction ID from doctrine
Get transaction ID from doctrine

Time:01-08

I want to get the transaction ID of the current running transaction. Here is my code:

$con = $entityManager->getConnection();
$con->beginTransaction();

$entity = new Entity(); .....

$entityManager->persist($entity);
$entityManager->flush();

$con->commit();

I can't find any method to get the ID... Only running native SQL can solve this, but I don't think this is proper

CodePudding user response:

I'm assuming you're using the default settings of Doctrine, so it will use PHP PDO underneath. It looks that PDO does not have ability to resolve transaction ID - maybe because it's different for each DBMS, so it's not ANSI SQL.

Take a look on PDO::beginTransaction() documentation, it returns just boolean. Also, there is no other function to retrieve ID.

You have to execute raw SQL which may be not that bad. I know that many people thinks that ORM/DBAL will allow to change DB engine in future, but - from my experience, YMMV - I always used some engine-specific behaviours. Even running SQLite for testing instead of MySQL failed at some point because of small differences about handling nulls and default values.

To fetch transation ID in PostgreSQL:

$con = $entityManager->getConnection();

$query = $con->executeQuery('SELECT txid_current()');

$transactionId = $query->fetchOne();
  • Related