From e7a385acd33f0c4025d4133bd6a40ba13b0ea762 Mon Sep 17 00:00:00 2001 From: Hazem Nassr Date: Mon, 19 Oct 2020 16:28:12 +0300 Subject: [PATCH 1/4] Fix when the value is numeric in where like --- src/Jenssegers/Mongodb/Query/Builder.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Jenssegers/Mongodb/Query/Builder.php b/src/Jenssegers/Mongodb/Query/Builder.php index 86526ed53..9642b9cbc 100644 --- a/src/Jenssegers/Mongodb/Query/Builder.php +++ b/src/Jenssegers/Mongodb/Query/Builder.php @@ -993,7 +993,6 @@ protected function compileWhereAll(array $where) protected function compileWhereBasic(array $where) { extract($where); - $is_numeric = false; // Replace like or not like with a Regex instance. if (in_array($operator, ['like', 'not like'])) { @@ -1019,7 +1018,6 @@ protected function compileWhereBasic(array $where) $plain_value = Str::replaceLast('%', null, $plain_value); } - $is_numeric = is_numeric($plain_value); $value = new Regex($regex, 'i'); } // Manipulate regexp operations. elseif (in_array($operator, ['regexp', 'not regexp', 'regex', 'not regex'])) { @@ -1039,11 +1037,7 @@ protected function compileWhereBasic(array $where) } if (!isset($operator) || $operator == '=') { - if ($is_numeric) { - $query = ['$where' => '/^'.$value->getPattern().'/.test(this.'.$column.')']; - } else { - $query = [$column => $value]; - } + $query = [$column => $value]; } elseif (array_key_exists($operator, $this->conversion)) { $query = [$column => [$this->conversion[$operator] => $value]]; } else { From a3bcbe9af60921543d0cd5fa8a45e2372d1c26cc Mon Sep 17 00:00:00 2001 From: Hazem Nassr Date: Wed, 21 Oct 2020 21:16:14 +0300 Subject: [PATCH 2/4] Fix when column have hyphen (-) --- src/Jenssegers/Mongodb/Query/Builder.php | 8 +++++++- tests/QueryTest.php | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Jenssegers/Mongodb/Query/Builder.php b/src/Jenssegers/Mongodb/Query/Builder.php index 9642b9cbc..e466ea411 100644 --- a/src/Jenssegers/Mongodb/Query/Builder.php +++ b/src/Jenssegers/Mongodb/Query/Builder.php @@ -993,6 +993,7 @@ protected function compileWhereAll(array $where) protected function compileWhereBasic(array $where) { extract($where); + $is_numeric = false; // Replace like or not like with a Regex instance. if (in_array($operator, ['like', 'not like'])) { @@ -1018,6 +1019,7 @@ protected function compileWhereBasic(array $where) $plain_value = Str::replaceLast('%', null, $plain_value); } + $is_numeric = is_numeric($plain_value); $value = new Regex($regex, 'i'); } // Manipulate regexp operations. elseif (in_array($operator, ['regexp', 'not regexp', 'regex', 'not regex'])) { @@ -1037,7 +1039,11 @@ protected function compileWhereBasic(array $where) } if (!isset($operator) || $operator == '=') { - $query = [$column => $value]; + if ($is_numeric) { + $query = ['$where' => '/^'.$value->getPattern().'/.test(this["'.$column.'"])']; + } else { + $query = [$column => $value]; + } } elseif (array_key_exists($operator, $this->conversion)) { $query = [$column => [$this->conversion[$operator] => $value]]; } else { diff --git a/tests/QueryTest.php b/tests/QueryTest.php index 5e6261b52..fdf6f7c04 100644 --- a/tests/QueryTest.php +++ b/tests/QueryTest.php @@ -16,6 +16,7 @@ public function setUp(): void User::create(['name' => 'Brett Boe', 'age' => 35, 'title' => 'user']); User::create(['name' => 'Tommy Toe', 'age' => 33, 'title' => 'user']); User::create(['name' => 'Yvonne Yoe', 'age' => 35, 'title' => 'admin']); + User::create(['name' => 'Hazem Nassr', 'user-age' => 28, 'title' => 'member']); User::create(['name' => 'Error', 'age' => null, 'title' => null]); } @@ -78,6 +79,9 @@ public function testLike(): void $users = User::where('age', 'like', '%3')->get(); $this->assertCount(4, $users); + + $users = User::where('user-age', 'like', '%28')->get(); + $this->assertCount(1, $users); } public function testNotLike(): void From dd413de03ef8b456039077cf5e48673eabf64417 Mon Sep 17 00:00:00 2001 From: Hazem Nassr Date: Wed, 21 Oct 2020 21:26:22 +0300 Subject: [PATCH 3/4] Fix test --- tests/QueryTest.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/QueryTest.php b/tests/QueryTest.php index fdf6f7c04..a6e86e6e6 100644 --- a/tests/QueryTest.php +++ b/tests/QueryTest.php @@ -42,10 +42,10 @@ public function testWhere(): void $this->assertCount(1, $users); $users = User::where('age', '!=', 35)->get(); - $this->assertCount(6, $users); + $this->assertCount(7, $users); $users = User::where('age', '<>', 35)->get(); - $this->assertCount(6, $users); + $this->assertCount(7, $users); } public function testAndWhere(): void @@ -87,16 +87,16 @@ public function testLike(): void public function testNotLike(): void { $users = User::where('name', 'not like', '%doe')->get(); - $this->assertCount(7, $users); + $this->assertCount(8, $users); $users = User::where('name', 'not like', '%y%')->get(); - $this->assertCount(6, $users); + $this->assertCount(7, $users); $users = User::where('name', 'not LIKE', '%y%')->get(); - $this->assertCount(6, $users); + $this->assertCount(7, $users); $users = User::where('name', 'not like', 't%')->get(); - $this->assertCount(8, $users); + $this->assertCount(9, $users); } public function testSelect(): void @@ -156,7 +156,7 @@ public function testIn(): void $this->assertCount(6, $users); $users = User::whereNotIn('age', [33, 35])->get(); - $this->assertCount(4, $users); + $this->assertCount(5, $users); $users = User::whereNotNull('age') ->whereNotIn('age', [33, 35])->get(); @@ -166,7 +166,7 @@ public function testIn(): void public function testWhereNull(): void { $users = User::whereNull('age')->get(); - $this->assertCount(1, $users); + $this->assertCount(2, $users); } public function testWhereNotNull(): void @@ -199,7 +199,7 @@ public function testOrder(): void public function testGroupBy(): void { $users = User::groupBy('title')->get(); - $this->assertCount(3, $users); + $this->assertCount(4, $users); $users = User::groupBy('age')->get(); $this->assertCount(6, $users); @@ -229,11 +229,11 @@ public function testGroupBy(): void public function testCount(): void { $count = User::where('age', '<>', 35)->count(); - $this->assertEquals(6, $count); + $this->assertEquals(7, $count); // Test for issue #165 $count = User::select('_id', 'age', 'title')->where('age', '<>', 35)->count(); - $this->assertEquals(6, $count); + $this->assertEquals(7, $count); } public function testExists(): void @@ -331,12 +331,12 @@ public function testPaginate(): void $results = User::paginate(2); $this->assertEquals(2, $results->count()); $this->assertNotNull($results->first()->title); - $this->assertEquals(9, $results->total()); + $this->assertEquals(10, $results->total()); $results = User::paginate(2, ['name', 'age']); $this->assertEquals(2, $results->count()); $this->assertNull($results->first()->title); - $this->assertEquals(9, $results->total()); + $this->assertEquals(10, $results->total()); $this->assertEquals(1, $results->currentPage()); } From 864c0a75958ca46cf59edf103e30a8645b67f699 Mon Sep 17 00:00:00 2001 From: Divine <48183131+divine@users.noreply.github.com> Date: Thu, 22 Oct 2020 05:45:28 +0300 Subject: [PATCH 4/4] Change name to neutral --- tests/QueryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/QueryTest.php b/tests/QueryTest.php index a6e86e6e6..d7c170495 100644 --- a/tests/QueryTest.php +++ b/tests/QueryTest.php @@ -16,7 +16,7 @@ public function setUp(): void User::create(['name' => 'Brett Boe', 'age' => 35, 'title' => 'user']); User::create(['name' => 'Tommy Toe', 'age' => 33, 'title' => 'user']); User::create(['name' => 'Yvonne Yoe', 'age' => 35, 'title' => 'admin']); - User::create(['name' => 'Hazem Nassr', 'user-age' => 28, 'title' => 'member']); + User::create(['name' => 'John Smith', 'user-age' => 28, 'title' => 'member']); User::create(['name' => 'Error', 'age' => null, 'title' => null]); }