Transakcije
Transakcije zagotavljajo, da se uspešno izvedejo vse operacije znotraj transakcije ali pa se ne izvede nobena. So bistvenega pomena za ohranjanje konsistentnosti podatkov med kompleksnejšimi operacijami.
Najpreprostejši način uporabe transakcij je videti takole:
$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;
}
Precej čistejši in elegantnejši način za dosego istega rezultata je uporaba metode transaction()
. Ta metoda
kot parameter sprejme povratni klic, ki ga izvede znotraj transakcije. Če se povratni klic izvede, ne da bi se pri tem pojavila
izjema, se transakcija samodejno izvede. Če se vrže izjema, se transakcija vrne nazaj, izjema pa se razširi naprej.
$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'
]);
});
Metoda transaction()
lahko vrne tudi vrednosti:
$count = $database->transaction(function ($database) {
$result = $database->query('UPDATE users SET active = ?', true);
return $result->getRowCount(); // vrne število posodobljenih vrstic
});