Skip to content
This repository was archived by the owner on Nov 4, 2021. It is now read-only.

Commit 93fd1b2

Browse files
committed
allow disabling database attribute hydration
1 parent 3d6fb5c commit 93fd1b2

File tree

1 file changed

+44
-18
lines changed

1 file changed

+44
-18
lines changed

src/ElasticEngine.php

+44-18
Original file line numberDiff line numberDiff line change
@@ -295,24 +295,7 @@ public function map(Builder $builder, $results, $model)
295295
return Collection::make();
296296
}
297297

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);
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+
$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+
335361
/**
336362
* {@inheritdoc}
337363
*/

0 commit comments

Comments
 (0)