@@ -255,33 +255,32 @@ final protected static function getManyToOneRelationViaIntermediate(
255255 ): array {
256256 assert ($ intermediateFactory instanceof AbstractModelFactory);
257257 assert ($ targetFactory instanceof AbstractModelFactory);
258- $ retval = array ();
259-
260-
258+ $ many2Many = array ();
259+
261260 /* Retrieve Parent -> Intermediate -> Target objects */
262261 $ objectIds = [];
263- foreach ($ objects as $ object ) {
262+ foreach ($ objects as $ object ) {
264263 $ kv = $ object ->getKeyValueDict ();
265264 $ objectIds [] = $ kv [$ objectField ];
266265 }
267266 $ qF = new ContainFilter ($ filterField , $ objectIds , $ intermediateFactory );
268267 $ jF = new JoinFilter ($ intermediateFactory , $ joinField , $ joinField );
269268 $ hO = $ targetFactory ->filter ([Factory::FILTER => $ qF , Factory::JOIN => $ jF ]);
270-
271- /* Build mapping Parent -> Intermediate */
272- $ i2p = [];
273- foreach ($ hO [$ intermediateFactory ->getModelName ()] as $ intermidiateObject ) {
274- $ kv = $ intermidiateObject ->getKeyValueDict ();
275- $ i2p [$ kv [$ joinField ]] = $ kv [$ filterField ];
269+
270+ $ intermediateObjectList = $ hO [$ intermediateFactory ->getModelName ()];
271+ $ targetObjectList = $ hO [$ targetFactory ->getModelName ()];
272+
273+ $ intermediateObject = current ($ intermediateObjectList );
274+ $ targetObject = current ($ targetObjectList );
275+
276+ while ($ intermediateObject && $ targetObject ) {
277+ $ kv = $ intermediateObject ->getKeyValueDict ();
278+ $ many2Many [$ kv [$ filterField ]][] = $ targetObject ;
279+
280+ $ intermediateObject = next ($ intermediateObjectList );
281+ $ targetObject = next ($ targetObjectList );
276282 }
277-
278- /* Associate Target -> Parent (via Intermediate) */
279- foreach ($ hO [$ targetFactory ->getModelName ()] as $ targetObject ) {
280- $ parent = $ i2p [$ targetObject ->getKeyValueDict ()[$ joinField ]];
281- $ retval [$ parent ][] = $ targetObject ;
282- }
283-
284- return $ retval ;
283+ return $ many2Many ;
285284 }
286285
287286 /**
0 commit comments