From 60a2ef6eee378d69063d5b4faf823b035243e25f Mon Sep 17 00:00:00 2001 From: Mathieu TUDISCO Date: Fri, 1 Sep 2017 11:48:42 +0200 Subject: [PATCH] Fix ErrorException in operatorForWhere collection method. --- src/Illuminate/Support/Collection.php | 28 ++++++++++++++----------- tests/Support/SupportCollectionTest.php | 13 ++++++++++++ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/Illuminate/Support/Collection.php b/src/Illuminate/Support/Collection.php index 0ea82955c340..7cea45540d60 100644 --- a/src/Illuminate/Support/Collection.php +++ b/src/Illuminate/Support/Collection.php @@ -481,18 +481,22 @@ protected function operatorForWhere($key, $operator, $value) return function ($item) use ($key, $operator, $value) { $retrieved = data_get($item, $key); - switch ($operator) { - default: - case '=': - case '==': return $retrieved == $value; - case '!=': - case '<>': return $retrieved != $value; - case '<': return $retrieved < $value; - case '>': return $retrieved > $value; - case '<=': return $retrieved <= $value; - case '>=': return $retrieved >= $value; - case '===': return $retrieved === $value; - case '!==': return $retrieved !== $value; + try { + switch ($operator) { + default: + case '=': + case '==': return $retrieved == $value; + case '!=': + case '<>': return $retrieved != $value; + case '<': return $retrieved < $value; + case '>': return $retrieved > $value; + case '<=': return $retrieved <= $value; + case '>=': return $retrieved >= $value; + case '===': return $retrieved === $value; + case '!==': return $retrieved !== $value; + } + } catch (Exception $e) { + return false; } }; } diff --git a/tests/Support/SupportCollectionTest.php b/tests/Support/SupportCollectionTest.php index 87612e528cb8..d1c82fccc0b3 100755 --- a/tests/Support/SupportCollectionTest.php +++ b/tests/Support/SupportCollectionTest.php @@ -384,6 +384,19 @@ public function testWhere() [['v' => 4]], $c->where('v', '>', 3)->values()->all() ); + + $object = (object) ['foo' => 'bar']; + + $this->assertEquals( + [], + $c->where('v', $object)->values()->all() + ); + + $c = new Collection([['v' => 1], ['v' => $object]]); + $this->assertEquals( + [['v' => $object]], + $c->where('v', $object)->values()->all() + ); } public function testWhereStrict()