Nette Documentation Preview

syntax
Exceções
********

O Nette Database usa uma hierarquia de exceções. A classe base é `Nette\Database\DriverException`, que estende `PDOException` e fornece funcionalidade aprimorada para trabalhar com erros de banco de dados:

- O método `getDriverCode()` retorna o código de erro do driver do banco de dados.
- O método `getSqlState()` retorna o código SQLSTATE.
- Você pode usar os métodos `getQueryString()` e `getParameters()` para recuperar a consulta original e seus parâmetros.

A classe `DriverException` é estendida pelas seguintes exceções especializadas:

- `ConnectionException` - indica uma falha na conexão com o servidor de banco de dados.
- `ConstraintViolationException` - a classe base para violações de restrições de banco de dados, da qual as seguintes exceções são herdadas:
  - `ForeignKeyConstraintViolationException` - violação de uma restrição de chave estrangeira.
  - `NotNullConstraintViolationException` - violação de uma restrição NOT NULL.
  - `UniqueConstraintViolationException` - violação de uma restrição de exclusividade.


O exemplo a seguir demonstra como capturar um `UniqueConstraintViolationException`, que ocorre quando se tenta inserir um usuário com um e-mail que já existe no banco de dados (supondo que a coluna `email` tenha um índice exclusivo):

```php
try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'A user with this email already exists.';

} catch (Nette\Database\DriverException $e) {
	echo 'An error occurred during registration: ' . $e->getMessage();
}
```

Exceções

O Nette Database usa uma hierarquia de exceções. A classe base é Nette\Database\DriverException, que estende PDOException e fornece funcionalidade aprimorada para trabalhar com erros de banco de dados:

  • O método getDriverCode() retorna o código de erro do driver do banco de dados.
  • O método getSqlState() retorna o código SQLSTATE.
  • Você pode usar os métodos getQueryString() e getParameters() para recuperar a consulta original e seus parâmetros.

A classe DriverException é estendida pelas seguintes exceções especializadas:

  • ConnectionException – indica uma falha na conexão com o servidor de banco de dados.
  • ConstraintViolationException – a classe base para violações de restrições de banco de dados, da qual as seguintes exceções são herdadas:
    • ForeignKeyConstraintViolationException – violação de uma restrição de chave estrangeira.
    • NotNullConstraintViolationException – violação de uma restrição NOT NULL.
    • UniqueConstraintViolationException – violação de uma restrição de exclusividade.

O exemplo a seguir demonstra como capturar um UniqueConstraintViolationException, que ocorre quando se tenta inserir um usuário com um e-mail que já existe no banco de dados (supondo que a coluna email tenha um índice exclusivo):

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'A user with this email already exists.';

} catch (Nette\Database\DriverException $e) {
	echo 'An error occurred during registration: ' . $e->getMessage();
}