Nette Documentation Preview

syntax
Transakcje
**********

.[perex]
Transakcje gwarantują, że albo wszystkie operacje w ramach transakcji zostaną wykonane, albo żadna z nich nie zostanie wykonana. Są one przydatne do zapewnienia spójności danych podczas bardziej złożonych operacji.

Najprostszy sposób użycia transakcji wygląda następująco:

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

Znacznie bardziej elegancko można to samo zapisać za pomocą metody `transaction()`. Jako parametr przyjmuje ona callback, który wykonuje w transakcji. Jeśli callback przebiegnie bez wyjątku, transakcja jest automatycznie zatwierdzana. Jeśli wystąpi wyjątek, transakcja jest anulowana (rollback), a wyjątek jest propagowany dalej.

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

Metoda `transaction()` może również zwracać wartości:

```php
$count = $database->transaction(function ($database) {
	$result = $database->query('UPDATE users SET active = ?', true);
	return $result->getRowCount(); // zwraca liczbę zaktualizowanych wierszy
});
```

Transakcje

Transakcje gwarantują, że albo wszystkie operacje w ramach transakcji zostaną wykonane, albo żadna z nich nie zostanie wykonana. Są one przydatne do zapewnienia spójności danych podczas bardziej złożonych operacji.

Najprostszy sposób użycia transakcji wygląda następująco:

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

Znacznie bardziej elegancko można to samo zapisać za pomocą metody transaction(). Jako parametr przyjmuje ona callback, który wykonuje w transakcji. Jeśli callback przebiegnie bez wyjątku, transakcja jest automatycznie zatwierdzana. Jeśli wystąpi wyjątek, transakcja jest anulowana (rollback), a wyjątek jest propagowany dalej.

$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() może również zwracać wartości:

$count = $database->transaction(function ($database) {
	$result = $database->query('UPDATE users SET active = ?', true);
	return $result->getRowCount(); // zwraca liczbę zaktualizowanych wierszy
});