From 56461a9a97fc7e6edb495ffd8227935123d5c16a Mon Sep 17 00:00:00 2001 From: Dev11 Date: Fri, 3 Oct 2025 21:27:28 +0330 Subject: [PATCH] Fix bug with number #54910 --- .../Collections/Traits/EnumeratesValues.php | 8 +++- tests/Support/SupportCollectionTest.php | 40 ++++++++++++++----- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/Illuminate/Collections/Traits/EnumeratesValues.php b/src/Illuminate/Collections/Traits/EnumeratesValues.php index 9b6c4cf6249a..a15b03936289 100644 --- a/src/Illuminate/Collections/Traits/EnumeratesValues.php +++ b/src/Illuminate/Collections/Traits/EnumeratesValues.php @@ -1114,9 +1114,13 @@ protected function operatorForWhere($key, $operator = null, $value = null) return in_array($operator, ['!=', '<>', '!==']); } + if ((is_int($retrieved) || is_float($retrieved)) && $retrieved == 0 && $value === true) { + return true; + } + switch ($operator) { - default: - case '=': + default: + case '=': case '==': return $retrieved == $value; case '!=': case '<>': return $retrieved != $value; diff --git a/tests/Support/SupportCollectionTest.php b/tests/Support/SupportCollectionTest.php index 81a6a3fd7dbe..5779a85e1eba 100755 --- a/tests/Support/SupportCollectionTest.php +++ b/tests/Support/SupportCollectionTest.php @@ -953,7 +953,17 @@ public function active() #[DataProvider('collectionClassProvider')] public function testWhere($collection) { - $c = new $collection([['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3'], ['v' => 4]]); + $c = new $collection([['v' => 0],['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3'], ['v' => 4]]); + + $this->assertEquals( + [['v' => 0]], + $c->where('v', 0)->values()->all() + ); + + $this->assertEquals( + [['v' => 0.0]], + $c->where('v', 0.0)->values()->all() + ); $this->assertEquals( [['v' => 3], ['v' => '3']], @@ -977,19 +987,19 @@ public function testWhere($collection) ); $this->assertEquals( - [['v' => 1], ['v' => 2], ['v' => 4]], + [['v' => 0],['v' => 1], ['v' => 2], ['v' => 4]], $c->where('v', '<>', 3)->values()->all() ); $this->assertEquals( - [['v' => 1], ['v' => 2], ['v' => 4]], + [['v' => 0],['v' => 1], ['v' => 2], ['v' => 4]], $c->where('v', '!=', 3)->values()->all() ); $this->assertEquals( - [['v' => 1], ['v' => 2], ['v' => '3'], ['v' => 4]], + [['v' => 0],['v' => 1], ['v' => 2], ['v' => '3'], ['v' => 4]], $c->where('v', '!==', 3)->values()->all() ); $this->assertEquals( - [['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3']], + [['v' => 0],['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3']], $c->where('v', '<=', 3)->values()->all() ); $this->assertEquals( @@ -997,7 +1007,7 @@ public function testWhere($collection) $c->where('v', '>=', 3)->values()->all() ); $this->assertEquals( - [['v' => 1], ['v' => 2]], + [['v' => 0],['v' => 1], ['v' => 2]], $c->where('v', '<', 3)->values()->all() ); $this->assertEquals( @@ -1013,17 +1023,17 @@ public function testWhere($collection) ); $this->assertEquals( - [['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3'], ['v' => 4]], + [['v' => 0],['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3'], ['v' => 4]], $c->where('v', '<>', $object)->values()->all() ); $this->assertEquals( - [['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3'], ['v' => 4]], + [['v' => 0],['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3'], ['v' => 4]], $c->where('v', '!=', $object)->values()->all() ); $this->assertEquals( - [['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3'], ['v' => 4]], + [['v' => 0],['v' => 1], ['v' => 2], ['v' => 3], ['v' => '3'], ['v' => 4]], $c->where('v', '!==', $object)->values()->all() ); @@ -1086,6 +1096,18 @@ public function testWhere($collection) $this->assertEquals([['v' => 2, 'g' => 3]], $c->where('v', 2)->where('g', '>', 2)->values()->all()); $this->assertEquals([], $c->where('v', 2)->where('g', 4)->values()->all()); $this->assertEquals([['v' => 2, 'g' => null]], $c->where('v', 2)->whereNull('g')->values()->all()); + + $c = new $collection([ + ['name' => 'c', 'v' => null], + ['name' => 'd', 'v' => 0], + ['name' => 'e', 'v' => 0.0], + ['name' => 'f', 'v' => 0.1], + ]); + + $this->assertSame($c->where('name' , 'c')->value('v') , null); + $this->assertSame($c->where('name' , 'd')->value('v') , 0); + $this->assertSame($c->where('name' , 'e')->value('v') , 0.0); + $this->assertSame($c->where('name' , 'f')->value('v') , 0.1); } #[DataProvider('collectionClassProvider')]