Nette Documentation Preview

syntax
Conversão de tipos
******************

.[perex]
Nette Database converte automaticamente os valores retornados do banco de dados para os tipos PHP correspondentes.


Data e hora
-----------

Os dados de tempo são convertidos em objetos `Nette\Utils\DateTime`. Se você deseja que os dados de tempo sejam convertidos em objetos imutáveis `Nette\Database\DateTime`, defina a opção `newDateTime` como `true` na [configuração|configuration].

```php
$row = $database->fetch('SELECT created_at FROM articles');
echo $row->created_at instanceof DateTime; // true
echo $row->created_at->format('j. n. Y');
```

No caso do MySQL, o tipo de dados `TIME` é convertido em objetos `DateInterval`.


Valores booleanos
-----------------

Os valores booleanos são automaticamente convertidos para `true` ou `false`. No MySQL, `TINYINT(1)` é convertido se definirmos `convertBoolean` como `true` na [configuração|configuration].

```php
$row = $database->fetch('SELECT is_published FROM articles');
echo gettype($row->is_published); // 'boolean'
```


Valores numéricos
-----------------

Os valores numéricos são convertidos para `int` ou `float` de acordo com o tipo da coluna no banco de dados:

```php
$row = $database->fetch('SELECT id, price FROM products');
echo gettype($row->id);    // integer
echo gettype($row->price); // float
```


Normalização personalizada
--------------------------

Usando o método `setRowNormalizer(?callable $normalizer)`, você pode definir uma função personalizada para transformar linhas do banco de dados. Isso é útil, por exemplo, para a conversão automática de tipos de dados.

```php
$database->setRowNormalizer(function(array $row, ResultSet $resultSet): array {
	// a conversão de tipos ocorre aqui
	return $row;
});
```

Conversão de tipos

Nette Database converte automaticamente os valores retornados do banco de dados para os tipos PHP correspondentes.

Data e hora

Os dados de tempo são convertidos em objetos Nette\Utils\DateTime. Se você deseja que os dados de tempo sejam convertidos em objetos imutáveis Nette\Database\DateTime, defina a opção newDateTime como true na configuração.

$row = $database->fetch('SELECT created_at FROM articles');
echo $row->created_at instanceof DateTime; // true
echo $row->created_at->format('j. n. Y');

No caso do MySQL, o tipo de dados TIME é convertido em objetos DateInterval.

Valores booleanos

Os valores booleanos são automaticamente convertidos para true ou false. No MySQL, TINYINT(1) é convertido se definirmos convertBoolean como true na configuração.

$row = $database->fetch('SELECT is_published FROM articles');
echo gettype($row->is_published); // 'boolean'

Valores numéricos

Os valores numéricos são convertidos para int ou float de acordo com o tipo da coluna no banco de dados:

$row = $database->fetch('SELECT id, price FROM products');
echo gettype($row->id);    // integer
echo gettype($row->price); // float

Normalização personalizada

Usando o método setRowNormalizer(?callable $normalizer), você pode definir uma função personalizada para transformar linhas do banco de dados. Isso é útil, por exemplo, para a conversão automática de tipos de dados.

$database->setRowNormalizer(function(array $row, ResultSet $resultSet): array {
	// a conversão de tipos ocorre aqui
	return $row;
});