Transaktionen

Transaktionen garantieren, dass entweder alle Vorgänge innerhalb der Transaktion erfolgreich ausgeführt werden oder gar keine Vorgänge ausgeführt werden. Sie sind unerlässlich für die Wahrung der Datenkonsistenz bei komplexeren Operationen.

Die einfachste Art, Transaktionen zu verwenden, sieht wie folgt 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;
}

Eine viel sauberere und elegantere Methode, um das gleiche Ergebnis zu erzielen, ist die Methode transaction(). Diese Methode akzeptiert einen Callback als Parameter, den sie innerhalb der Transaktion ausführt. Wenn der Callback ausgeführt wird, ohne eine Ausnahme auszulösen, wird die Transaktion automatisch bestätigt. Wenn eine Ausnahme ausgelöst wird, wird die Transaktion zurückgesetzt und die Ausnahme wird weiter verbreitet.

$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
});
Version: 4.0