Skip to content

Commit 251d6e2

Browse files
Merge 5.3 into 5.x (#3354)
2 parents bdae18d + af499af commit 251d6e2

File tree

3 files changed

+82
-21
lines changed

3 files changed

+82
-21
lines changed

Diff for: .github/workflows/build-ci.yml

+8-4
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,24 @@ jobs:
3434
- "11.*"
3535
- "12.*"
3636
driver:
37-
- 1
37+
- 2
3838
include:
3939
- php: "8.1"
4040
laravel: "10.*"
4141
mongodb: "5.0"
4242
mode: "low-deps"
4343
os: "ubuntu-latest"
44-
driver: 1.x
45-
driver_version: "1.21.0"
44+
driver: 1
45+
- php: "8.3"
46+
laravel: "11.*"
47+
mongodb: "8.0"
48+
os: "ubuntu-latest"
49+
driver: 1
4650
- php: "8.4"
4751
laravel: "12.*"
4852
mongodb: "8.0"
4953
os: "ubuntu-latest"
50-
driver: 2
54+
driver: 1
5155
exclude:
5256
- php: "8.1"
5357
laravel: "11.*"

Diff for: src/Query/Builder.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1795,7 +1795,7 @@ private function aliasIdForQuery(array $values, bool $root = true): array
17951795
}
17961796

17971797
// ".id" subfield are alias for "._id"
1798-
if (str_ends_with($key, '.id') && ($root || $this->connection->getRenameEmbeddedIdField())) {
1798+
if (str_ends_with($key, '.id') && $this->connection->getRenameEmbeddedIdField()) {
17991799
$newkey = substr($key, 0, -3) . '._id';
18001800
if (array_key_exists($newkey, $values) && $value !== $values[$newkey]) {
18011801
throw new InvalidArgumentException(sprintf('Cannot have both "%s" and "%s" fields.', $key, $newkey));

Diff for: tests/Query/BuilderTest.php

+73-16
Original file line numberDiff line numberDiff line change
@@ -1599,29 +1599,86 @@ public static function getEloquentMethodsNotSupported()
15991599
yield 'orWhereIntegerNotInRaw' => [fn (Builder $builder) => $builder->orWhereIntegerNotInRaw('id', ['1a', 2])];
16001600
}
16011601

1602-
public function testRenameEmbeddedIdFieldCanBeDisabled()
1602+
#[DataProvider('provideDisableRenameEmbeddedIdField')]
1603+
public function testDisableRenameEmbeddedIdField(array $expected, Closure $build)
16031604
{
16041605
$builder = $this->getBuilder(false);
16051606
$this->assertFalse($builder->getConnection()->getRenameEmbeddedIdField());
16061607

1607-
$mql = $builder
1608-
->where('id', '=', 10)
1609-
->where('nested.id', '=', 20)
1610-
->where('embed', '=', ['id' => 30])
1611-
->toMql();
1612-
1613-
$this->assertEquals([
1614-
'find' => [
1615-
[
1616-
'$and' => [
1617-
['_id' => 10],
1618-
['nested.id' => 20],
1619-
['embed' => ['id' => 30]],
1608+
$mql = $build($builder)->toMql();
1609+
1610+
$this->assertEquals($expected, $mql);
1611+
}
1612+
1613+
public static function provideDisableRenameEmbeddedIdField()
1614+
{
1615+
yield 'rename embedded id field' => [
1616+
[
1617+
'find' => [
1618+
[
1619+
'$and' => [
1620+
['_id' => 10],
1621+
['nested.id' => 20],
1622+
['embed' => ['id' => 30]],
1623+
],
1624+
],
1625+
['typeMap' => ['root' => 'object', 'document' => 'array']],
1626+
],
1627+
],
1628+
fn (Builder $builder) => $builder->where('id', '=', 10)
1629+
->where('nested.id', '=', 20)
1630+
->where('embed', '=', ['id' => 30]),
1631+
];
1632+
1633+
yield 'rename root id' => [
1634+
['find' => [['_id' => 10], ['typeMap' => ['root' => 'object', 'document' => 'array']]]],
1635+
fn (Builder $builder) => $builder->where('id', '=', 10),
1636+
];
1637+
1638+
yield 'nested id not renamed' => [
1639+
['find' => [['nested.id' => 20], ['typeMap' => ['root' => 'object', 'document' => 'array']]]],
1640+
fn (Builder $builder) => $builder->where('nested.id', '=', 20),
1641+
];
1642+
1643+
yield 'embed id not renamed' => [
1644+
['find' => [['embed' => ['id' => 30]], ['typeMap' => ['root' => 'object', 'document' => 'array']]]],
1645+
fn (Builder $builder) => $builder->where('embed', '=', ['id' => 30]),
1646+
];
1647+
1648+
yield 'nested $and in $or' => [
1649+
[
1650+
'find' => [
1651+
[
1652+
'$or' => [
1653+
[
1654+
'$and' => [
1655+
['_id' => 10],
1656+
['nested.id' => 20],
1657+
['embed' => ['id' => 30]],
1658+
],
1659+
],
1660+
[
1661+
'$and' => [
1662+
['_id' => 40],
1663+
['nested.id' => 50],
1664+
['embed' => ['id' => 60]],
1665+
],
1666+
],
1667+
],
16201668
],
1669+
['typeMap' => ['root' => 'object', 'document' => 'array']],
16211670
],
1622-
['typeMap' => ['root' => 'object', 'document' => 'array']],
16231671
],
1624-
], $mql);
1672+
fn (Builder $builder) => $builder->orWhere(function (Builder $builder) {
1673+
return $builder->where('id', '=', 10)
1674+
->where('nested.id', '=', 20)
1675+
->where('embed', '=', ['id' => 30]);
1676+
})->orWhere(function (Builder $builder) {
1677+
return $builder->where('id', '=', 40)
1678+
->where('nested.id', '=', 50)
1679+
->where('embed', '=', ['id' => 60]);
1680+
}),
1681+
];
16251682
}
16261683

16271684
private function getBuilder(bool $renameEmbeddedIdField = true): Builder

0 commit comments

Comments
 (0)