@@ -1599,29 +1599,86 @@ public static function getEloquentMethodsNotSupported()
1599
1599
yield 'orWhereIntegerNotInRaw ' => [fn (Builder $ builder ) => $ builder ->orWhereIntegerNotInRaw ('id ' , ['1a ' , 2 ])];
1600
1600
}
1601
1601
1602
- public function testRenameEmbeddedIdFieldCanBeDisabled ()
1602
+ #[DataProvider('provideDisableRenameEmbeddedIdField ' )]
1603
+ public function testDisableRenameEmbeddedIdField (array $ expected , Closure $ build )
1603
1604
{
1604
1605
$ builder = $ this ->getBuilder (false );
1605
1606
$ this ->assertFalse ($ builder ->getConnection ()->getRenameEmbeddedIdField ());
1606
1607
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
+ ],
1620
1668
],
1669
+ ['typeMap ' => ['root ' => 'object ' , 'document ' => 'array ' ]],
1621
1670
],
1622
- ['typeMap ' => ['root ' => 'object ' , 'document ' => 'array ' ]],
1623
1671
],
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
+ ];
1625
1682
}
1626
1683
1627
1684
private function getBuilder (bool $ renameEmbeddedIdField = true ): Builder
0 commit comments