Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

‎.github/workflows/build-ci.yml

Lines changed: 8 additions & 4 deletions
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.*"

‎src/Query/Builder.php

Lines changed: 1 addition & 1 deletion
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));

‎tests/Query/BuilderTest.php

Lines changed: 73 additions & 16 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /