@@ -295,24 +295,7 @@ public function map(Builder $builder, $results, $model)
295295 return Collection::make ();
296296 }
297297
298- $ primaryKey = $ model ->getKeyName ();
299-
300- $ columns = Arr::get ($ results , '_payload.body._source ' );
301-
302- if (is_null ($ columns )) {
303- $ columns = ['* ' ];
304- } else {
305- $ columns [] = $ primaryKey ;
306- }
307-
308- $ ids = $ this ->mapIds ($ results )->all ();
309-
310- $ query = $ model ::usesSoftDelete () ? $ model ->withTrashed () : $ model ->newQuery ();
311-
312- $ models = $ query
313- ->whereIn ($ primaryKey , $ ids )
314- ->get ($ columns )
315- ->keyBy ($ primaryKey );
298+ $ models = $ this ->hydrateModels ($ model , $ results );
316299
317300 return Collection::make ($ results ['hits ' ]['hits ' ])
318301 ->map (function ($ hit ) use ($ models ) {
@@ -332,6 +315,49 @@ public function map(Builder $builder, $results, $model)
332315 ->values ();
333316 }
334317
318+ /**
319+ * @param $model
320+ * @param $results
321+ * @return Collection
322+ */
323+ public function hydrateModels ($ model , $ results )
324+ {
325+ // Hydrate models from elastic index
326+ if ($ model ->databaseHydrate === false ) {
327+ $ hits = collect ($ results ['hits ' ]['hits ' ]);
328+ $ className = get_class ($ model );
329+ $ models = new Collection ();
330+
331+ $ hits ->each (function ($ item , $ key ) use ($ className , $ model , $ models ) {
332+ $ attributes = $ item ['_source ' ];
333+ $ models ->put ($ item ['_id ' ], new $ className ($ attributes ));
334+ });
335+ }
336+ // Hydrate models from database
337+ else {
338+ $ primaryKey = $ model ->getKeyName ();
339+
340+ $ columns = Arr::get ($ results , '_payload.body._source ' );
341+
342+ if (is_null ($ columns )) {
343+ $ columns = ['* ' ];
344+ } else {
345+ $ columns [] = $ primaryKey ;
346+ }
347+
348+ $ ids = $ this ->mapIds ($ results )->all ();
349+
350+ $ query = $ model ::usesSoftDelete () ? $ model ->withTrashed () : $ model ->newQuery ();
351+
352+ $ models = $ query
353+ ->whereIn ($ primaryKey , $ ids )
354+ ->get ($ columns )
355+ ->keyBy ($ primaryKey );
356+ }
357+
358+ return $ models ;
359+ }
360+
335361 /**
336362 * {@inheritdoc}
337363 */
0 commit comments