Transaktionen
Transaktionen garantieren, dass entweder alle Operationen innerhalb der Transaktion ausgeführt werden oder keine. Sie sind nützlich, um die Datenkonsistenz bei komplexeren Operationen sicherzustellen.
Die einfachste Art, Transaktionen zu verwenden, sieht so aus:
$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;
}
Viel eleganter können Sie dasselbe mit der Methode transaction()
schreiben. Sie akzeptiert einen Callback als
Parameter, der innerhalb der Transaktion ausgeführt wird. Wenn der Callback ohne Ausnahme durchläuft, wird die Transaktion
automatisch bestätigt (commit). Wenn eine Ausnahme auftritt, wird die Transaktion zurückgerollt (rollback) und die Ausnahme
weitergegeben.
$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'
]);
});
Die Methode transaction()
kann auch Werte zurückgeben:
$count = $database->transaction(function ($database) {
$result = $database->query('UPDATE users SET active = ?', true);
return $result->getRowCount(); // gibt die Anzahl der aktualisierten Zeilen zurück
});