|
28 | 28 |
|
29 | 29 | use function array_column;
|
30 | 30 | use function array_flip;
|
| 31 | +use function array_key_exists; |
31 | 32 | use function array_map;
|
32 | 33 | use function array_merge;
|
33 |
| -use function array_search; |
34 | 34 | use function assert;
|
35 | 35 | use function call_user_func;
|
36 | 36 | use function class_uses_recursive;
|
@@ -286,12 +286,27 @@ public function map(Builder $builder, $results, $model): Collection
|
286 | 286 | return $model->newCollection();
|
287 | 287 | }
|
288 | 288 |
|
289 |
| - $ids = array_column($results, '_id'); |
| 289 | + $objectIds = array_column($results, '_id'); |
| 290 | + $objectIdPositions = array_flip($objectIds); |
290 | 291 |
|
291 |
| - return $model->getScoutModelsByIds($builder, $ids) |
292 |
| - ->filter(fn (Model $model) => in_array($model->getScoutKey(), $ids)) |
293 |
| - ->sortBy(fn (Model $model) => array_search($model->getScoutKey(), $ids)) |
294 |
| - ->values(); |
| 292 | + return $model->getScoutModelsByIds( |
| 293 | + $builder, |
| 294 | + $objectIds, |
| 295 | + )->filter(function ($model) use ($objectIdPositions) { |
| 296 | + return array_key_exists($model->getScoutKey(), $objectIdPositions); |
| 297 | + })->map(function ($model) use ($results, $objectIdPositions) { |
| 298 | + $result = $results[$objectIdPositions[$model->getScoutKey()]] ?? []; |
| 299 | + |
| 300 | + foreach ($result as $key => $value) { |
| 301 | + if (substr($key, 0, 1) === '_') { |
| 302 | + $model->withScoutMetadata($key, $value); |
| 303 | + } |
| 304 | + } |
| 305 | + |
| 306 | + return $model; |
| 307 | + })->sortBy(function ($model) use ($objectIdPositions) { |
| 308 | + return $objectIdPositions[$model->getScoutKey()]; |
| 309 | + })->values(); |
295 | 310 | }
|
296 | 311 |
|
297 | 312 | /**
|
|
0 commit comments