Nette Documentation Preview

syntax
Transações
**********

.[perex]
As transações garantem que todas as operações dentro da transação sejam executadas com êxito ou que nenhuma seja executada. Elas são essenciais para manter a consistência dos dados durante operações mais complexas.

A maneira mais simples de usar transações é a seguinte:

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

Uma forma muito mais limpa e elegante de obter o mesmo resultado é usar o método `transaction()`. Esse método aceita um retorno de chamada como parâmetro, que é executado dentro da transação. Se a callback for executada sem lançar uma exceção, a transação será confirmada automaticamente. Se uma exceção for lançada, a transação será revertida e a exceção continuará sendo propagada.

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

O método `transaction()` também pode retornar valores:

```php
$count = $database->transaction(function ($database) {
	$result = $database->query('UPDATE users SET active = ?', true);
	return $result->getRowCount(); // retorna o número de linhas atualizadas
});
```

Transações

As transações garantem que todas as operações dentro da transação sejam executadas com êxito ou que nenhuma seja executada. Elas são essenciais para manter a consistência dos dados durante operações mais complexas.

A maneira mais simples de usar transações é a seguinte:

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

Uma forma muito mais limpa e elegante de obter o mesmo resultado é usar o método transaction(). Esse método aceita um retorno de chamada como parâmetro, que é executado dentro da transação. Se a callback for executada sem lançar uma exceção, a transação será confirmada automaticamente. Se uma exceção for lançada, a transação será revertida e a exceção continuará sendo propagada.

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

O método transaction() também pode retornar valores:

$count = $database->transaction(function ($database) {
	$result = $database->query('UPDATE users SET active = ?', true);
	return $result->getRowCount(); // retorna o número de linhas atualizadas
});