Nette Documentation Preview

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

.[perex]
O Nette Database converte automaticamente os valores recuperados do banco de dados para os tipos PHP apropriados.


Data e hora .[#toc-date-and-time]
---------------------------------

Os valores de data e hora são convertidos em objetos `Nette\Utils\DateTime`. Se você preferir que os valores de data e hora sejam convertidos em objetos `Nette\Database\DateTime` imutáveis, ative a opção `newDateTime` 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');
```

Para o MySQL, o tipo de dados `TIME` é convertido em objetos `DateInterval`.


Valores booleanos .[#toc-boolean-values]
----------------------------------------

Os valores booleanos são normalizados automaticamente para `true` ou `false`. No MySQL, o tipo `TINYINT(1)` é convertido quando a opção `convertBoolean` é ativada na [configuração | configuration].

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


Valores numéricos .[#toc-numeric-values]
----------------------------------------

Os valores numéricos são convertidos para `int` ou `float`, dependendo do tipo de coluna no banco de dados:

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


Normalização personalizada .[#toc-custom-normalization]
-------------------------------------------------------

Você pode definir uma função personalizada para transformar as linhas do banco de dados usando o método `setRowNormalizer(?callable $normalizer)`. 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 do tipo de dados ocorre aqui
	return $row;
});
```

Conversão de tipos

O Nette Database converte automaticamente os valores recuperados do banco de dados para os tipos PHP apropriados.

Data e hora

Os valores de data e hora são convertidos em objetos Nette\Utils\DateTime. Se você preferir que os valores de data e hora sejam convertidos em objetos Nette\Database\DateTime imutáveis, ative a opção newDateTime 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');

Para o MySQL, o tipo de dados TIME é convertido em objetos DateInterval.

Valores booleanos

Os valores booleanos são normalizados automaticamente para true ou false. No MySQL, o tipo TINYINT(1) é convertido quando a opção convertBoolean é ativada na configuração.

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

Valores numéricos

Os valores numéricos são convertidos para int ou float, dependendo do tipo de coluna no banco de dados:

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

Normalização personalizada

Você pode definir uma função personalizada para transformar as linhas do banco de dados usando o método setRowNormalizer(?callable $normalizer). 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 do tipo de dados ocorre aqui
	return $row;
});