İşlemler (Transactions)
İşlemler (Transactions), işlem içindeki tüm operasyonların ya gerçekleştirilmesini ya da hiçbirinin gerçekleştirilmemesini garanti eder. Daha karmaşık operasyonlarda veri tutarlılığını sağlamak için kullanışlıdırlar.
İşlemleri kullanmanın en basit yolu şöyledir:
$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;
}
Aynı şeyi transaction()
metodunu kullanarak çok daha zarif bir şekilde yazabilirsiniz. Parametre olarak,
işlem içinde yürüteceği bir geri arama (callback) kabul eder. Geri arama bir istisna olmadan çalışırsa, işlem otomatik
olarak onaylanır (commit). Bir istisna oluşursa, işlem iptal edilir (rollback) ve istisna daha da yayılır.
$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()
metodu ayrıca değerler de döndürebilir:
$count = $database->transaction(function ($database) {
$result = $database->query('UPDATE users SET active = ?', true);
return $result->getRowCount(); // güncellenen satır sayısını döndürür
});