Nette Documentation Preview

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

O Nette Database utiliza uma hierarquia de exceções. A classe base é `Nette\Database\DriverException`, que herda de `PDOException` e fornece opções estendidas para trabalhar com erros do 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
- Os métodos `getQueryString()` e `getParameters()` permitem obter a consulta original e os seus parâmetros

As seguintes exceções especializadas herdam de `DriverException`:

- `ConnectionException` - sinaliza falha na conexão com o servidor de banco de dados
- `ConstraintViolationException` - classe base para violação de restrições do banco de dados, da qual herdam:
  - `ForeignKeyConstraintViolationException` - violação de chave estrangeira
  - `NotNullConstraintViolationException` - violação da restrição NOT NULL
  - `UniqueConstraintViolationException` - violação da unicidade do valor


Exemplo de captura da exceção `UniqueConstraintViolationException`, que ocorre quando tentamos inserir um utilizador com um e-mail que já existe no banco de dados (assumindo que a coluna `email` tenha um índice único).

```php
try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Um utilizador com este e-mail já existe.';

} catch (Nette\Database\DriverException $e) {
	echo 'Ocorreu um erro durante o registo: ' . $e->getMessage();
}
```

Exceções

O Nette Database utiliza uma hierarquia de exceções. A classe base é Nette\Database\DriverException, que herda de PDOException e fornece opções estendidas para trabalhar com erros do 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
  • Os métodos getQueryString() e getParameters() permitem obter a consulta original e os seus parâmetros

As seguintes exceções especializadas herdam de DriverException:

  • ConnectionException – sinaliza falha na conexão com o servidor de banco de dados
  • ConstraintViolationException – classe base para violação de restrições do banco de dados, da qual herdam:
    • ForeignKeyConstraintViolationException – violação de chave estrangeira
    • NotNullConstraintViolationException – violação da restrição NOT NULL
    • UniqueConstraintViolationException – violação da unicidade do valor

Exemplo de captura da exceção UniqueConstraintViolationException, que ocorre quando tentamos inserir um utilizador com um e-mail que já existe no banco de dados (assumindo que a coluna email tenha um índice único).

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Um utilizador com este e-mail já existe.';

} catch (Nette\Database\DriverException $e) {
	echo 'Ocorreu um erro durante o registo: ' . $e->getMessage();
}