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