Drupal db_transaction 使用范式

Submitted by admin on Wed, 10/26/2016 - 16:35
$transaction = isset($transaction) ? $transaction : db_transaction();

try {
  $ids = array_keys($entities);

  db_delete($this->entityInfo['base table'])
    ->condition($this->idKey, $ids, 'IN')
    ->execute();

  if (isset($this->revisionTable)) {
    db_delete($this->revisionTable)
      ->condition($this->idKey, $ids, 'IN')
      ->execute();
  }
  // Reset the cache as soon as the changes have been applied.
  $this->resetCache($ids);

  foreach ($entities as $id => $entity) {
    $this->invoke('delete', $entity);
  }
  // Ignore slave server temporarily.
  db_ignore_slave();
}
catch (Exception $e) {
  $transaction->rollback();
  watchdog_exception($this->entityType, $e);
  throw $e;
}

以上代码片段为使用db_transaction范式。摘抄自entity模块。

http://cgit.drupalcode.org/entity/tree/includes/entity.controller.inc#n426

http://cgit.drupalcode.org/entity/tree/includes/entity.controller.inc#n362