Tranzakciók

A tranzakciók garantálják, hogy a tranzakción belül vagy minden művelet sikeresen végrehajtásra kerül, vagy egyik sem kerül végrehajtásra. A tranzakciók elengedhetetlenek az adatok konzisztenciájának fenntartásához az összetettebb műveletek során.

A tranzakciók használatának legegyszerűbb módja a következőképpen néz ki:

$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;
}

A transaction() módszerrel sokkal tisztább és elegánsabb módon érhetjük el ugyanazt az eredményt. Ez a módszer paraméterként egy visszahívást fogad el, amelyet a tranzakción belül hajt végre. Ha a callback kivétel dobása nélkül fut le, akkor a tranzakciót automatikusan leköti. Ha kivételt dob, akkor a tranzakció visszahívásra kerül, és a kivétel továbbterjed.

$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'
	]);
});

A transaction() metódus értékeket is visszaadhat:

$count = $database->transaction(function ($database) {
	$result = $database->query('UPDATE users SET active = ?', true);
	return $result->getRowCount(); // a frissített sorok számát adja vissza
});
verzió: 4.0