Nette Documentation Preview

syntax
Перетворення типів
******************

.[perex]
Nette Database автоматично перетворює значення, отримані з бази даних, у відповідні типи 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); // поплавок
```


Користувацька нормалізація .[#toc-custom-normalization]
-------------------------------------------------------

Ви можете визначити користувацьку функцію для перетворення рядків бази даних за допомогою методу `setRowNormalizer(?callable $normalizer)`. Це корисно, наприклад, для автоматичного перетворення типів даних.

```php
$database->setRowNormalizer(function(array $row, ResultSet $resultSet): array {
	// перетворення типів даних відбувається тут
	return $row;
});
```

Перетворення типів

Nette Database автоматично перетворює значення, отримані з бази даних, у відповідні типи 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); // поплавок

Користувацька нормалізація

Ви можете визначити користувацьку функцію для перетворення рядків бази даних за допомогою методу setRowNormalizer(?callable $normalizer). Це корисно, наприклад, для автоматичного перетворення типів даних.

$database->setRowNormalizer(function(array $row, ResultSet $resultSet): array {
	// перетворення типів даних відбувається тут
	return $row;
});