【问题标题】:Get transaction ID from doctrine从学说中获取交易 ID
【发布时间】:2023-01-08 04:18:00
【问题描述】:

我想获取当前正在运行的事务的事务 ID。 这是我的代码:

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

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

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

$con->commit();

我找不到任何获取 ID 的方法...只有运行本机 SQL 才能解决这个问题,但我认为这不合适

【问题讨论】:

    标签: postgresql symfony doctrine


    【解决方案1】:

    我假设您使用的是 Doctrine 的默认设置,因此它将在下面使用 PHP PDO。看起来 PDO 没有解析事务 ID 的能力——可能是因为每个 DBMS 都不同,所以它不是 ANSI SQL。

    看看PDO::beginTransaction() documentation,它只返回布尔值。此外,没有其他功能可以检索 ID。

    您必须执行原始 SQL,这可能还不错。我知道很多人认为 ORM/DBAL 将允许在未来更改数据库引擎,但是 - 根据我的经验,YMMV - 我总是使用一些特定于引擎的行为。由于在处理空值和默认值方面存在细微差异,即使运行 SQLite 而不是 MySQL 进行测试有时也会失败。

    要在 PostgreSQL 中获取事务 ID:

    $con = $entityManager->getConnection();
    
    $query = $con->executeQuery('SELECT txid_current()');
    
    $transactionId = $query->fetchOne();
    

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 2013-07-01
      • 2014-05-11
      • 2019-10-11
      • 2012-01-26
      • 2018-12-20
      • 1970-01-01
      • 2021-05-30
      • 2015-11-06
      相关资源
      最近更新 更多