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