İşlemler
İşlemler, işlem içindeki tüm işlemlerin başarıyla yürütülmesini ya da hiçbirinin yürütülmemesini garanti eder. Daha karmaşık işlemler sırasında veri tutarlılığını korumak için gereklidirler.
İşlemleri kullanmanın en basit yolu şuna benzer:
$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ı sonucu elde etmenin çok daha temiz ve zarif bir yolu transaction()
yöntemini kullanmaktır. Bu yöntem
parametre olarak bir geri arama kabul eder ve bu geri arama işlem içinde yürütülür. Geri arama bir istisna fırlatmadan
çalışırsa, işlem otomatik olarak işlenir. Bir istisna atılırsa, işlem geri alınır ve istisna daha fazla 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()
yöntemi de değer 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
});