Skip to content

Commit 72abb86

Browse files
committed
Merge branch 'include-nesting' of https://github.com/thomasvanlankveld/api into rewrite
2 parents b2bbd2e + 8ef0f4e commit 72abb86

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

src/Transformer/FractalTransformer.php

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ public function transform($response, $transformer, Binding $binding, Request $re
7676
}
7777

7878
if ($response instanceof EloquentCollection) {
79-
$response->load($this->fractal->getRequestedIncludes());
79+
$requestedIncludes = $this->fractal->getRequestedIncludes();
80+
$eagerLoads = $this->getEagerLoads($transformer, $requestedIncludes);
81+
$response->load($eagerLoads);
8082
}
8183

8284
foreach ($binding->getMeta() as $key => $value) {
@@ -129,7 +131,10 @@ protected function createResource($response, $transformer, array $parameters)
129131
*/
130132
public function parseFractalIncludes(Request $request)
131133
{
132-
$includes = array_filter(explode($this->includeSeparator, $request->get($this->includeKey)));
134+
$includes = $request->get($this->includeKey);
135+
136+
if(!is_array($includes))
137+
$includes = array_filter(explode($this->includeSeparator, $includes));
133138

134139
$this->fractal->parseIncludes($includes);
135140
}
@@ -143,4 +148,34 @@ public function getFractal()
143148
{
144149
return $this->fractal;
145150
}
151+
152+
/**
153+
* Get includes as their array keys for eager loading.
154+
*
155+
* @param string|string[] $requestedIncludes
156+
*
157+
* @return string[]
158+
*/
159+
public function getEagerLoads($transformer, $requestedIncludes)
160+
{
161+
$requestedIncludes = (array) $requestedIncludes; // Ensure $requestedIncludeStrings is an array
162+
163+
$availableRequestedIncludes = array_intersect($transformer->getAvailableIncludes(), $requestedIncludes);
164+
$defaultIncludes = $transformer->getDefaultIncludes();
165+
166+
$includes = array_merge($availableRequestedIncludes, $defaultIncludes);
167+
168+
$eagerLoads = array();
169+
170+
foreach ($includes as $includeKey => $includeName) {
171+
if (gettype($includeKey) === "string") {
172+
unset($includes[$includeKey]);
173+
array_push($eagerLoads, $includeKey);
174+
} else {
175+
array_push($eagerLoads, $includeName);
176+
}
177+
}
178+
179+
return $eagerLoads;
180+
}
146181
}

0 commit comments

Comments
 (0)