diff --git a/src/Manager.php b/src/Manager.php index 0320bb1e..f55c4508 100644 --- a/src/Manager.php +++ b/src/Manager.php @@ -134,10 +134,9 @@ public function parseIncludes($includes): self // Trim it down to a cool level of recursion $includeName = $this->trimToAcceptableRecursionLevel($includeName); - if (in_array($includeName, $this->requestedIncludes)) { - continue; + if (!in_array($includeName, $this->requestedIncludes)) { + $this->requestedIncludes[] = $includeName; } - $this->requestedIncludes[] = $includeName; // No Params? Bored if ($allModifiersStr === null) { @@ -164,10 +163,16 @@ public function parseIncludes($includes): self $modifierArr[$modifierName] = explode($this->paramDelimiter, $modifierParamStr); } - $this->includeParams[$includeName] = $modifierArr; + if (!isset($this->includeParams[$includeName])) { + $this->includeParams[$includeName] = $modifierArr; + } if ($subRelations) { - $this->requestedIncludes[] = $this->trimToAcceptableRecursionLevel($includeName . '.' . $subRelations); + $subRelationsIncludeName = $this->trimToAcceptableRecursionLevel($includeName . '.' . $subRelations); + + if (!in_array($subRelationsIncludeName, $this->requestedIncludes)) { + $this->requestedIncludes[] = $subRelationsIncludeName; + } } } diff --git a/test/ManagerTest.php b/test/ManagerTest.php index 5cd99d60..d6ee03a8 100755 --- a/test/ManagerTest.php +++ b/test/ManagerTest.php @@ -86,6 +86,20 @@ public function testParseIncludes() $this->assertSame(['5', '1'], $params['limit']); $this->assertSame(['name'], $params['order']); $this->assertSame(['foo', 'foo.bar', 'baz'], $manager->getRequestedIncludes()); + + // The first relation modifier wins + $manager->parseIncludes('foo:modifier(1).bar,foo:modifier(2).baz'); + + $params = $manager->getIncludeParams('foo'); + + $this->assertInstanceOf('League\Fractal\ParamBag', $params); + + $this->assertSame(['1'], $params['modifier']); + + // Two sub relations with parent using modifier + $manager->parseIncludes('foo:modifier.bar,foo:modifier.baz'); + + $this->assertSame(['foo', 'foo.bar', 'foo.baz'], $manager->getRequestedIncludes()); } public function testParseExcludeSelfie()