diff --git a/src/Db/Core.php b/src/Db/Core.php index 5f9314b..392649b 100644 --- a/src/Db/Core.php +++ b/src/Db/Core.php @@ -620,7 +620,7 @@ public function fetchAssoc() if (count($hidden)) { foreach ($hidden as $item) { - if (isset($result[$item])) { + if (array_key_exists($item, $result)) { unset($result[$item]); } elseif (strpos($item, '.') !== false) { $hiddenEagerFields[] = explode('.', $item); @@ -727,7 +727,7 @@ public function fetchAll($type = 'assoc') if (count($hidden)) { foreach ($hidden as $item) { - if (isset($result[$item])) { + if (array_key_exists($item, $result)) { unset($result[$item]); } elseif (strpos($item, '.') !== false) { $hiddenEagerFields[] = explode('.', $item); diff --git a/tests/db.test.php b/tests/db.test.php index a28b818..1f9f221 100644 --- a/tests/db.test.php +++ b/tests/db.test.php @@ -250,3 +250,25 @@ ->and($db->select('users')->orderBy('name')->count())->toBe(3) ->and($db->select('users')->orderBy('name')->limit(2)->count())->toBe(2); }); + +test('hidden removes fields whose value is null', function () { + // https://github.com/leafsphp/db/issues/42 + $db = testDb(); + $db->query('CREATE TABLE tokens ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + email TEXT NOT NULL, + reset_token TEXT NULL + )')->execute(); + $db->insert('tokens')->params(['email' => 'mika@leafphp.dev', 'reset_token' => null])->execute(); + $db->insert('tokens')->params(['email' => 'jane@leafphp.dev', 'reset_token' => null])->execute(); + + $row = $db->select('tokens')->where('email', 'mika@leafphp.dev')->hidden('reset_token')->first(); + expect($row)->not->toHaveKey('reset_token') + ->and($row)->toHaveKey('email'); + + $rows = $db->select('tokens')->hidden('reset_token')->all(); + expect($rows)->toHaveCount(2); + foreach ($rows as $r) { + expect($r)->not->toHaveKey('reset_token'); + } +});