Nette Documentation Preview

syntax
Transazioni
***********

.[perex]
Le transazioni garantiscono che tutte le operazioni all'interno della transazione vengano eseguite con successo, oppure che non vengano eseguite affatto. Sono essenziali per mantenere la coerenza dei dati durante le operazioni più complesse.

Il modo più semplice di usare le transazioni è il seguente:

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

Un modo molto più pulito ed elegante per ottenere lo stesso risultato è quello di utilizzare il metodo `transaction()`. Questo metodo accetta come parametro una callback, che viene eseguita all'interno della transazione. Se la callback viene eseguita senza lanciare un'eccezione, la transazione viene automaticamente impegnata. Se viene lanciata un'eccezione, la transazione viene riportata indietro e l'eccezione viene ulteriormente propagata.

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

Il metodo `transaction()` può anche restituire dei valori:

```php
$count = $database->transaction(function ($database) {
	$result = $database->query('UPDATE users SET active = ?', true);
	return $result->getRowCount(); // restituisce il numero di righe aggiornate
});
```

Transazioni

Le transazioni garantiscono che tutte le operazioni all'interno della transazione vengano eseguite con successo, oppure che non vengano eseguite affatto. Sono essenziali per mantenere la coerenza dei dati durante le operazioni più complesse.

Il modo più semplice di usare le transazioni è il seguente:

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

Un modo molto più pulito ed elegante per ottenere lo stesso risultato è quello di utilizzare il metodo transaction(). Questo metodo accetta come parametro una callback, che viene eseguita all'interno della transazione. Se la callback viene eseguita senza lanciare un'eccezione, la transazione viene automaticamente impegnata. Se viene lanciata un'eccezione, la transazione viene riportata indietro e l'eccezione viene ulteriormente propagata.

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

Il metodo transaction() può anche restituire dei valori:

$count = $database->transaction(function ($database) {
	$result = $database->query('UPDATE users SET active = ?', true);
	return $result->getRowCount(); // restituisce il numero di righe aggiornate
});