@@ -295,24 +295,7 @@ public function map(Builder $builder, $results, $model)
295
295
return Collection::make ();
296
296
}
297
297
298
- $ scoutKeyName = $ model ->getScoutKeyName ();
299
-
300
- $ columns = Arr::get ($ results , '_payload.body._source ' );
301
-
302
- if (is_null ($ columns )) {
303
- $ columns = ['* ' ];
304
- } else {
305
- $ columns [] = $ scoutKeyName ;
306
- }
307
-
308
- $ ids = $ this ->mapIds ($ results )->all ();
309
-
310
- $ query = $ model ::usesSoftDelete () ? $ model ->withTrashed () : $ model ->newQuery ();
311
-
312
- $ models = $ query
313
- ->whereIn ($ scoutKeyName , $ ids )
314
- ->get ($ columns )
315
- ->keyBy ($ scoutKeyName );
298
+ $ models = $ this ->hydrateModels ($ model , $ results );
316
299
317
300
return Collection::make ($ results ['hits ' ]['hits ' ])
318
301
->map (function ($ hit ) use ($ models ) {
@@ -332,6 +315,49 @@ public function map(Builder $builder, $results, $model)
332
315
->values ();
333
316
}
334
317
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
+ $ scoutKeyName = $ model ->getScoutKeyName ();
339
+
340
+ $ columns = Arr::get ($ results , '_payload.body._source ' );
341
+
342
+ if (is_null ($ columns )) {
343
+ $ columns = ['* ' ];
344
+ } else {
345
+ $ columns [] = $ scoutKeyName ;
346
+ }
347
+
348
+ $ ids = $ this ->mapIds ($ results )->all ();
349
+
350
+ $ query = $ model ::usesSoftDelete () ? $ model ->withTrashed () : $ model ->newQuery ();
351
+
352
+ $ models = $ query
353
+ ->whereIn ($ scoutKeyName , $ ids )
354
+ ->get ($ columns )
355
+ ->keyBy ($ scoutKeyName );
356
+ }
357
+
358
+ return $ models ;
359
+ }
360
+
335
361
/**
336
362
* {@inheritdoc}
337
363
*/
0 commit comments