Skip to content

Commit e362198

Browse files
authored
Merge branch 'master' into fix-issue-2182
2 parents 0918c68 + 09fcda8 commit e362198

File tree

5 files changed

+29
-40
lines changed

5 files changed

+29
-40
lines changed

Diff for: CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.
33

44
## [Unreleased]
55

6+
## [3.8.3] - 2021-02-21
7+
8+
### Changed
9+
- Fix query builder regression [#2204](https://github.com/jenssegers/laravel-mongodb/pull/2204) by [@divine](https://github.com/divine)
10+
611
## [3.8.2] - 2020-12-18
712

813
### Changed

Diff for: Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
ARG PHP_VERSION=7.2
2-
ARG COMPOSER_VERSION=1.8
1+
ARG PHP_VERSION=7.4
2+
ARG COMPOSER_VERSION=2.0
33

44
FROM composer:${COMPOSER_VERSION}
55
FROM php:${PHP_VERSION}-cli

Diff for: README.md

+8
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,14 @@ These expressions will be injected directly into the query.
599599
User::whereRaw([
600600
'age' => ['$gt' => 30, '$lt' => 40],
601601
])->get();
602+
603+
User::whereRaw([
604+
'$where' => '/.*123.*/.test(this.field)',
605+
])->get();
606+
607+
User::whereRaw([
608+
'$where' => '/.*123.*/.test(this["hyphenated-field"])',
609+
])->get();
602610
```
603611

604612
You can also perform raw expressions on the internal MongoCollection object. If this is executed on the model class, it will return a collection of models.

Diff for: src/Jenssegers/Mongodb/Query/Builder.php

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

998997
// Replace like or not like with a Regex instance.
999998
if (in_array($operator, ['like', 'not like'])) {
@@ -1005,21 +1004,15 @@ protected function compileWhereBasic(array $where)
10051004

10061005
// Convert to regular expression.
10071006
$regex = preg_replace('#(^|[^\\\])%#', '$1.*', preg_quote($value));
1008-
$plain_value = $value;
10091007

10101008
// Convert like to regular expression.
10111009
if (!Str::startsWith($value, '%')) {
10121010
$regex = '^' . $regex;
1013-
} else {
1014-
$plain_value = Str::replaceFirst('%', null, $plain_value);
10151011
}
10161012
if (!Str::endsWith($value, '%')) {
10171013
$regex .= '$';
1018-
} else {
1019-
$plain_value = Str::replaceLast('%', null, $plain_value);
10201014
}
10211015

1022-
$is_numeric = is_numeric($plain_value);
10231016
$value = new Regex($regex, 'i');
10241017
} // Manipulate regexp operations.
10251018
elseif (in_array($operator, ['regexp', 'not regexp', 'regex', 'not regex'])) {
@@ -1039,11 +1032,7 @@ protected function compileWhereBasic(array $where)
10391032
}
10401033

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

Diff for: tests/QueryTest.php

+13-26
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ 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' => 'John Smith', 'user-age' => 28, 'title' => 'member']);
2019
User::create(['name' => 'Error', 'age' => null, 'title' => null]);
2120
}
2221

@@ -42,10 +41,10 @@ public function testWhere(): void
4241
$this->assertCount(1, $users);
4342

4443
$users = User::where('age', '!=', 35)->get();
45-
$this->assertCount(7, $users);
44+
$this->assertCount(6, $users);
4645

4746
$users = User::where('age', '<>', 35)->get();
48-
$this->assertCount(7, $users);
47+
$this->assertCount(6, $users);
4948
}
5049

5150
public function testAndWhere(): void
@@ -70,33 +69,21 @@ public function testLike(): void
7069

7170
$users = User::where('name', 'like', 't%')->get();
7271
$this->assertCount(1, $users);
73-
74-
$users = User::where('age', 'like', '%35%')->get();
75-
$this->assertCount(3, $users);
76-
77-
$users = User::where('age', 'like', '3%')->get();
78-
$this->assertCount(6, $users);
79-
80-
$users = User::where('age', 'like', '%3')->get();
81-
$this->assertCount(4, $users);
82-
83-
$users = User::where('user-age', 'like', '%28')->get();
84-
$this->assertCount(1, $users);
8572
}
8673

8774
public function testNotLike(): void
8875
{
8976
$users = User::where('name', 'not like', '%doe')->get();
90-
$this->assertCount(8, $users);
77+
$this->assertCount(7, $users);
9178

9279
$users = User::where('name', 'not like', '%y%')->get();
93-
$this->assertCount(7, $users);
80+
$this->assertCount(6, $users);
9481

9582
$users = User::where('name', 'not LIKE', '%y%')->get();
96-
$this->assertCount(7, $users);
83+
$this->assertCount(6, $users);
9784

9885
$users = User::where('name', 'not like', 't%')->get();
99-
$this->assertCount(9, $users);
86+
$this->assertCount(8, $users);
10087
}
10188

10289
public function testSelect(): void
@@ -156,7 +143,7 @@ public function testIn(): void
156143
$this->assertCount(6, $users);
157144

158145
$users = User::whereNotIn('age', [33, 35])->get();
159-
$this->assertCount(5, $users);
146+
$this->assertCount(4, $users);
160147

161148
$users = User::whereNotNull('age')
162149
->whereNotIn('age', [33, 35])->get();
@@ -166,7 +153,7 @@ public function testIn(): void
166153
public function testWhereNull(): void
167154
{
168155
$users = User::whereNull('age')->get();
169-
$this->assertCount(2, $users);
156+
$this->assertCount(1, $users);
170157
}
171158

172159
public function testWhereNotNull(): void
@@ -199,7 +186,7 @@ public function testOrder(): void
199186
public function testGroupBy(): void
200187
{
201188
$users = User::groupBy('title')->get();
202-
$this->assertCount(4, $users);
189+
$this->assertCount(3, $users);
203190

204191
$users = User::groupBy('age')->get();
205192
$this->assertCount(6, $users);
@@ -229,11 +216,11 @@ public function testGroupBy(): void
229216
public function testCount(): void
230217
{
231218
$count = User::where('age', '<>', 35)->count();
232-
$this->assertEquals(7, $count);
219+
$this->assertEquals(6, $count);
233220

234221
// Test for issue #165
235222
$count = User::select('_id', 'age', 'title')->where('age', '<>', 35)->count();
236-
$this->assertEquals(7, $count);
223+
$this->assertEquals(6, $count);
237224
}
238225

239226
public function testExists(): void
@@ -331,12 +318,12 @@ public function testPaginate(): void
331318
$results = User::paginate(2);
332319
$this->assertEquals(2, $results->count());
333320
$this->assertNotNull($results->first()->title);
334-
$this->assertEquals(10, $results->total());
321+
$this->assertEquals(9, $results->total());
335322

336323
$results = User::paginate(2, ['name', 'age']);
337324
$this->assertEquals(2, $results->count());
338325
$this->assertNull($results->first()->title);
339-
$this->assertEquals(10, $results->total());
326+
$this->assertEquals(9, $results->total());
340327
$this->assertEquals(1, $results->currentPage());
341328
}
342329

0 commit comments

Comments
 (0)