トランザクション
トランザクションは、トランザクション内のすべての操作が実行されるか、または何も実行されないかのいずれかを保証します。これらは、より複雑な操作でデータの整合性を確保するのに役立ちます。
トランザクションを使用する最も簡単な方法は次のようになります:
$database->beginTransaction();
try {
$database->query('DELETE FROM articles WHERE id = ?', $id);
$database->query('INSERT INTO audit_log', [
'article_id' => $id,
'action' => 'delete'
]);
$database->commit();
} catch (\Exception $e) {
$database->rollBack();
throw $e;
}
transaction()
メソッドを使用すると、同じことをはるかにエレガントに記述できます。パラメータとしてコールバックを受け取り、それをトランザクション内で実行します。コールバックが例外なく実行されると、トランザクションは自動的にコミットされます。例外が発生した場合、トランザクションはキャンセル(ロールバック)され、例外はさらに伝播されます。
$database->transaction(function ($database) use ($id) {
$database->query('DELETE FROM articles WHERE id = ?', $id);
$database->query('INSERT INTO audit_log', [
'article_id' => $id,
'action' => 'delete'
]);
});
transaction()
メソッドは値を返すこともできます:
$count = $database->transaction(function ($database) {
$result = $database->query('UPDATE users SET active = ?', true);
return $result->getRowCount(); // 更新された行数を返します
});