Skip to content

Commit a3bcbe9

Browse files
committed
Fix when column have hyphen (-)
1 parent e7a385a commit a3bcbe9

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/Jenssegers/Mongodb/Query/Builder.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,7 @@ protected function compileWhereAll(array $where)
993993
protected function compileWhereBasic(array $where)
994994
{
995995
extract($where);
996+
$is_numeric = false;
996997

997998
// Replace like or not like with a Regex instance.
998999
if (in_array($operator, ['like', 'not like'])) {
@@ -1018,6 +1019,7 @@ protected function compileWhereBasic(array $where)
10181019
$plain_value = Str::replaceLast('%', null, $plain_value);
10191020
}
10201021

1022+
$is_numeric = is_numeric($plain_value);
10211023
$value = new Regex($regex, 'i');
10221024
} // Manipulate regexp operations.
10231025
elseif (in_array($operator, ['regexp', 'not regexp', 'regex', 'not regex'])) {
@@ -1037,7 +1039,11 @@ protected function compileWhereBasic(array $where)
10371039
}
10381040

10391041
if (!isset($operator) || $operator == '=') {
1040-
$query = [$column => $value];
1042+
if ($is_numeric) {
1043+
$query = ['$where' => '/^'.$value->getPattern().'/.test(this["'.$column.'"])'];
1044+
} else {
1045+
$query = [$column => $value];
1046+
}
10411047
} elseif (array_key_exists($operator, $this->conversion)) {
10421048
$query = [$column => [$this->conversion[$operator] => $value]];
10431049
} else {

tests/QueryTest.php

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public function setUp(): void
1616
User::create(['name' => 'Brett Boe', 'age' => 35, 'title' => 'user']);
1717
User::create(['name' => 'Tommy Toe', 'age' => 33, 'title' => 'user']);
1818
User::create(['name' => 'Yvonne Yoe', 'age' => 35, 'title' => 'admin']);
19+
User::create(['name' => 'Hazem Nassr', 'user-age' => 28, 'title' => 'member']);
1920
User::create(['name' => 'Error', 'age' => null, 'title' => null]);
2021
}
2122

@@ -78,6 +79,9 @@ public function testLike(): void
7879

7980
$users = User::where('age', 'like', '%3')->get();
8081
$this->assertCount(4, $users);
82+
83+
$users = User::where('user-age', 'like', '%28')->get();
84+
$this->assertCount(1, $users);
8185
}
8286

8387
public function testNotLike(): void

0 commit comments

Comments
 (0)