@@ -1394,6 +1394,168 @@ public function testOnlyObjectInDto(): void
13941394 self ::assertSame ($ this ->fixtures [2 ]->email ->email , $ result [2 ]->val2 ->val2 );
13951395 }
13961396
1397+ public function testOnlyObjectInNamedDto (): void
1398+ {
1399+ $ dql = '
1400+ SELECT
1401+ new named CmsUserDTOVariadicArg(
1402+ a,
1403+ new CmsDumbDTO(
1404+ u.name,
1405+ e.email
1406+ ) as dumb
1407+ )
1408+ FROM
1409+ Doctrine\Tests\Models\CMS\CmsUser u
1410+ LEFT JOIN
1411+ u.email e
1412+ LEFT JOIN
1413+ u.address a
1414+ ORDER BY
1415+ u.name ' ;
1416+
1417+ $ query = $ this ->getEntityManager ()->createQuery ($ dql );
1418+ $ result = $ query ->getResult ();
1419+
1420+ self ::assertCount (3 , $ result );
1421+
1422+ self ::assertInstanceOf (CmsUserDTOVariadicArg::class, $ result [0 ]);
1423+ self ::assertInstanceOf (CmsUserDTOVariadicArg::class, $ result [1 ]);
1424+ self ::assertInstanceOf (CmsUserDTOVariadicArg::class, $ result [2 ]);
1425+
1426+ self ::assertInstanceOf (CmsAddress::class, $ result [0 ]->otherProperties ['a ' ]);
1427+ self ::assertInstanceOf (CmsAddress::class, $ result [1 ]->otherProperties ['a ' ]);
1428+ self ::assertInstanceOf (CmsAddress::class, $ result [2 ]->otherProperties ['a ' ]);
1429+
1430+ self ::assertSame ($ this ->fixtures [0 ]->address ->city , $ result [0 ]->otherProperties ['a ' ]->city );
1431+ self ::assertSame ($ this ->fixtures [1 ]->address ->city , $ result [1 ]->otherProperties ['a ' ]->city );
1432+ self ::assertSame ($ this ->fixtures [2 ]->address ->city , $ result [2 ]->otherProperties ['a ' ]->city );
1433+
1434+ self ::assertSame ($ this ->fixtures [0 ]->address ->country , $ result [0 ]->otherProperties ['a ' ]->country );
1435+ self ::assertSame ($ this ->fixtures [1 ]->address ->country , $ result [1 ]->otherProperties ['a ' ]->country );
1436+ self ::assertSame ($ this ->fixtures [2 ]->address ->country , $ result [2 ]->otherProperties ['a ' ]->country );
1437+
1438+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [0 ]->otherProperties ['dumb ' ]);
1439+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [1 ]->otherProperties ['dumb ' ]);
1440+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [2 ]->otherProperties ['dumb ' ]);
1441+
1442+ self ::assertSame ($ this ->fixtures [0 ]->name , $ result [0 ]->otherProperties ['dumb ' ]->val1 );
1443+ self ::assertSame ($ this ->fixtures [1 ]->name , $ result [1 ]->otherProperties ['dumb ' ]->val1 );
1444+ self ::assertSame ($ this ->fixtures [2 ]->name , $ result [2 ]->otherProperties ['dumb ' ]->val1 );
1445+
1446+ self ::assertSame ($ this ->fixtures [0 ]->email ->email , $ result [0 ]->otherProperties ['dumb ' ]->val2 );
1447+ self ::assertSame ($ this ->fixtures [1 ]->email ->email , $ result [1 ]->otherProperties ['dumb ' ]->val2 );
1448+ self ::assertSame ($ this ->fixtures [2 ]->email ->email , $ result [2 ]->otherProperties ['dumb ' ]->val2 );
1449+ }
1450+
1451+ public function testOnlyObjectInNamedDtoWithAlias (): void
1452+ {
1453+ $ dql = '
1454+ SELECT
1455+ new named CmsUserDTOVariadicArg(
1456+ a as addr,
1457+ new CmsDumbDTO(
1458+ u.name,
1459+ e.email
1460+ ) as dumb
1461+ )
1462+ FROM
1463+ Doctrine\Tests\Models\CMS\CmsUser u
1464+ LEFT JOIN
1465+ u.email e
1466+ LEFT JOIN
1467+ u.address a
1468+ ORDER BY
1469+ u.name ' ;
1470+
1471+ $ query = $ this ->getEntityManager ()->createQuery ($ dql );
1472+ $ result = $ query ->getResult ();
1473+
1474+ self ::assertCount (3 , $ result );
1475+
1476+ self ::assertInstanceOf (CmsUserDTOVariadicArg::class, $ result [0 ]);
1477+ self ::assertInstanceOf (CmsUserDTOVariadicArg::class, $ result [1 ]);
1478+ self ::assertInstanceOf (CmsUserDTOVariadicArg::class, $ result [2 ]);
1479+
1480+ self ::assertInstanceOf (CmsAddress::class, $ result [0 ]->otherProperties ['addr ' ]);
1481+ self ::assertInstanceOf (CmsAddress::class, $ result [1 ]->otherProperties ['addr ' ]);
1482+ self ::assertInstanceOf (CmsAddress::class, $ result [2 ]->otherProperties ['addr ' ]);
1483+
1484+ self ::assertSame ($ this ->fixtures [0 ]->address ->city , $ result [0 ]->otherProperties ['addr ' ]->city );
1485+ self ::assertSame ($ this ->fixtures [1 ]->address ->city , $ result [1 ]->otherProperties ['addr ' ]->city );
1486+ self ::assertSame ($ this ->fixtures [2 ]->address ->city , $ result [2 ]->otherProperties ['addr ' ]->city );
1487+
1488+ self ::assertSame ($ this ->fixtures [0 ]->address ->country , $ result [0 ]->otherProperties ['addr ' ]->country );
1489+ self ::assertSame ($ this ->fixtures [1 ]->address ->country , $ result [1 ]->otherProperties ['addr ' ]->country );
1490+ self ::assertSame ($ this ->fixtures [2 ]->address ->country , $ result [2 ]->otherProperties ['addr ' ]->country );
1491+
1492+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [0 ]->otherProperties ['dumb ' ]);
1493+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [1 ]->otherProperties ['dumb ' ]);
1494+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [2 ]->otherProperties ['dumb ' ]);
1495+
1496+ self ::assertSame ($ this ->fixtures [0 ]->name , $ result [0 ]->otherProperties ['dumb ' ]->val1 );
1497+ self ::assertSame ($ this ->fixtures [1 ]->name , $ result [1 ]->otherProperties ['dumb ' ]->val1 );
1498+ self ::assertSame ($ this ->fixtures [2 ]->name , $ result [2 ]->otherProperties ['dumb ' ]->val1 );
1499+
1500+ self ::assertSame ($ this ->fixtures [0 ]->email ->email , $ result [0 ]->otherProperties ['dumb ' ]->val2 );
1501+ self ::assertSame ($ this ->fixtures [1 ]->email ->email , $ result [1 ]->otherProperties ['dumb ' ]->val2 );
1502+ self ::assertSame ($ this ->fixtures [2 ]->email ->email , $ result [2 ]->otherProperties ['dumb ' ]->val2 );
1503+ }
1504+
1505+ public function testOnlyObjectInNamedDtoWithSameNameAsTheProperties (): void
1506+ {
1507+ $ dql = '
1508+ SELECT
1509+ new named CmsUserDTONamedArgs(
1510+ addressEntity,
1511+ new CmsDumbDTO(
1512+ u.name,
1513+ e.email
1514+ ) as dumb
1515+ )
1516+ FROM
1517+ Doctrine\Tests\Models\CMS\CmsUser u
1518+ LEFT JOIN
1519+ u.email e
1520+ LEFT JOIN
1521+ u.address addressEntity
1522+ ORDER BY
1523+ u.name ' ;
1524+
1525+ $ query = $ this ->getEntityManager ()->createQuery ($ dql );
1526+ $ result = $ query ->getResult ();
1527+
1528+ self ::assertCount (3 , $ result );
1529+
1530+ self ::assertInstanceOf (CmsUserDTONamedArgs::class, $ result [0 ]);
1531+ self ::assertInstanceOf (CmsUserDTONamedArgs::class, $ result [1 ]);
1532+ self ::assertInstanceOf (CmsUserDTONamedArgs::class, $ result [2 ]);
1533+
1534+ self ::assertInstanceOf (CmsAddress::class, $ result [0 ]->addressEntity );
1535+ self ::assertInstanceOf (CmsAddress::class, $ result [1 ]->addressEntity );
1536+ self ::assertInstanceOf (CmsAddress::class, $ result [2 ]->addressEntity );
1537+
1538+ self ::assertSame ($ this ->fixtures [0 ]->address ->city , $ result [0 ]->addressEntity ->city );
1539+ self ::assertSame ($ this ->fixtures [1 ]->address ->city , $ result [1 ]->addressEntity ->city );
1540+ self ::assertSame ($ this ->fixtures [2 ]->address ->city , $ result [2 ]->addressEntity ->city );
1541+
1542+ self ::assertSame ($ this ->fixtures [0 ]->address ->country , $ result [0 ]->addressEntity ->country );
1543+ self ::assertSame ($ this ->fixtures [1 ]->address ->country , $ result [1 ]->addressEntity ->country );
1544+ self ::assertSame ($ this ->fixtures [2 ]->address ->country , $ result [2 ]->addressEntity ->country );
1545+
1546+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [0 ]->dumb );
1547+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [1 ]->dumb );
1548+ self ::assertInstanceOf (CmsDumbDTO::class, $ result [2 ]->dumb );
1549+
1550+ self ::assertSame ($ this ->fixtures [0 ]->name , $ result [0 ]->dumb ->val1 );
1551+ self ::assertSame ($ this ->fixtures [1 ]->name , $ result [1 ]->dumb ->val1 );
1552+ self ::assertSame ($ this ->fixtures [2 ]->name , $ result [2 ]->dumb ->val1 );
1553+
1554+ self ::assertSame ($ this ->fixtures [0 ]->email ->email , $ result [0 ]->dumb ->val2 );
1555+ self ::assertSame ($ this ->fixtures [1 ]->email ->email , $ result [1 ]->dumb ->val2 );
1556+ self ::assertSame ($ this ->fixtures [2 ]->email ->email , $ result [2 ]->dumb ->val2 );
1557+ }
1558+
13971559 public function testNamedArguments (): void
13981560 {
13991561 $ dql = <<<'SQL'
0 commit comments