Συναλλαγές

Οι συναλλαγές εγγυώνται ότι είτε όλες οι λειτουργίες εντός της συναλλαγής εκτελούνται με επιτυχία, είτε καμία δεν εκτελείται καθόλου. Είναι απαραίτητες για τη διατήρηση της συνέπειας των δεδομένων κατά τη διάρκεια πιο σύνθετων λειτουργιών.

Ο απλούστερος τρόπος χρήσης των συναλλαγών είναι ο εξής:

$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(); // επιστρέφει τον αριθμό των ενημερωμένων γραμμών
});
έκδοση: 4.0