型変換
Nette Databaseは、データベースから返された値を対応するPHP型に自動的に変換します。
日付と時刻
時間データはNette\Utils\DateTime
オブジェクトに変換されます。時間データを不変のNette\Database\DateTime
オブジェクトに変換したい場合は、設定でnewDateTime
オプションをtrueに設定します。
$row = $database->fetch('SELECT created_at FROM articles');
echo $row->created_at instanceof DateTime; // true
echo $row->created_at->format('Y年n月j日');
MySQLの場合、データ型TIME
はDateInterval
オブジェクトに変換されます。
ブール値
ブール値は自動的にtrue
またはfalse
に変換されます。設定でconvertBoolean
を設定すると、MySQLではTINYINT(1)
が変換されます。
$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); // integer
echo gettype($row->price); // float
カスタム正規化
setRowNormalizer(?callable $normalizer)
メソッドを使用して、データベースからの行を変換するためのカスタム関数を設定できます。これは、たとえばデータ型の自動変換に役立ちます。
$database->setRowNormalizer(function(array $row, ResultSet $resultSet): array {
// ここで型変換が行われます
return $row;
});