Nette Documentation Preview

syntax
Преобразуване на типа
*********************

.[perex]
Базата данни Nette автоматично преобразува стойностите, извлечени от базата данни, в съответните PHP типове.


Дата и час .[#toc-date-and-time]
--------------------------------

Стойностите на датата и часа се преобразуват в обекти `Nette\Utils\DateTime`. Ако предпочитате стойностите за дата и час да се преобразуват в неизменни `Nette\Database\DateTime` обекти, включете опцията `newDateTime` в [конфигурацията | 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');
```

За MySQL типът данни `TIME` се преобразува в обекти `DateInterval`.


Булеви стойности .[#toc-boolean-values]
---------------------------------------

Булевите стойности се нормализират автоматично към `true` или `false`. В MySQL типът `TINYINT(1)` се преобразува, когато в [конфигурацията | configuration] е активирана опцията `convertBoolean`.

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


Числени стойности .[#toc-numeric-values]
----------------------------------------

Числените стойности се превръщат в `int` или `float`, в зависимост от типа на колоната в базата данни:

```php
$row = $database->fetch('SELECT id, price FROM products');
echo gettype($row->id);    // цяло число
echo gettype($row->price); // float
```


Персонализирана нормализация .[#toc-custom-normalization]
---------------------------------------------------------

Можете да дефинирате потребителска функция за трансформиране на редове от базата данни, като използвате метода `setRowNormalizer(?callable $normalizer)`. Това е полезно например за автоматично преобразуване на типовете данни.

```php
$database->setRowNormalizer(function(array $row, ResultSet $resultSet): array {
	// тук се извършва преобразуване на типа данни
	return $row;
});
```

Преобразуване на типа

Базата данни Nette автоматично преобразува стойностите, извлечени от базата данни, в съответните PHP типове.

Дата и час

Стойностите на датата и часа се преобразуват в обекти Nette\Utils\DateTime. Ако предпочитате стойностите за дата и час да се преобразуват в неизменни Nette\Database\DateTime обекти, включете опцията newDateTime в конфигурацията.

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

За MySQL типът данни TIME се преобразува в обекти DateInterval.

Булеви стойности

Булевите стойности се нормализират автоматично към true или false. В MySQL типът TINYINT(1) се преобразува, когато в конфигурацията е активирана опцията convertBoolean.

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

Числени стойности

Числените стойности се превръщат в int или float, в зависимост от типа на колоната в базата данни:

$row = $database->fetch('SELECT id, price FROM products');
echo gettype($row->id);    // цяло число
echo gettype($row->price); // float

Персонализирана нормализация

Можете да дефинирате потребителска функция за трансформиране на редове от базата данни, като използвате метода setRowNormalizer(?callable $normalizer). Това е полезно например за автоматично преобразуване на типовете данни.

$database->setRowNormalizer(function(array $row, ResultSet $resultSet): array {
	// тук се извършва преобразуване на типа данни
	return $row;
});