@@ -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