Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Commit c300b9b

Browse files
semyonchetvertnyhErickTamayo
authored andcommitted
Added support for Laravel Scout 6.0 and 7.0, Laravel 5.8 (#119)
1 parent fb5b843 commit c300b9b

File tree

3 files changed

+23
-15
lines changed

3 files changed

+23
-15
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"keywords": ["laravel", "scout", "elasticsearch", "elastic"],
55
"require": {
66
"php": ">=5.6.4",
7-
"laravel/scout": "^5.0",
7+
"laravel/scout": "^5.0|^6.0|^7.0",
88
"elasticsearch/elasticsearch": "^5.0"
99
},
1010
"require-dev": {

src/ElasticsearchEngine.php

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use Laravel\Scout\Engines\Engine;
77
use Elasticsearch\Client as Elastic;
88
use Illuminate\Database\Eloquent\Collection;
9-
use Illuminate\Support\Collection as BaseCollection;
109

1110
class ElasticsearchEngine extends Engine
1211
{
@@ -212,21 +211,16 @@ public function mapIds($results)
212211
public function map(Builder $builder, $results, $model)
213212
{
214213
if ($results['hits']['total'] === 0) {
215-
return Collection::make();
214+
return $model->newCollection();
216215
}
217216

218-
$keys = collect($results['hits']['hits'])
219-
->pluck('_id')->values()->all();
217+
$keys = collect($results['hits']['hits'])->pluck('_id')->values()->all();
220218

221-
$models = $model->getScoutModelsByIds(
222-
$builder, $keys
223-
)->keyBy(function ($model) {
224-
return $model->getScoutKey();
225-
});
226-
227-
return collect($results['hits']['hits'])->map(function ($hit) use ($model, $models) {
228-
return isset($models[$hit['_id']]) ? $models[$hit['_id']] : null;
229-
})->filter()->values();
219+
return $model->getScoutModelsByIds(
220+
$builder, $keys
221+
)->filter(function ($model) use ($keys) {
222+
return in_array($model->getScoutKey(), $keys);
223+
});
230224
}
231225

232226
/**
@@ -240,6 +234,19 @@ public function getTotalCount($results)
240234
return $results['hits']['total'];
241235
}
242236

237+
/**
238+
* Flush all of the model's records from the engine.
239+
*
240+
* @param \Illuminate\Database\Eloquent\Model $model
241+
* @return void
242+
*/
243+
public function flush($model)
244+
{
245+
$model->newQuery()
246+
->orderBy($model->getKeyName())
247+
->unsearchable();
248+
}
249+
243250
/**
244251
* Generates the sort if theres any.
245252
*

tests/ElasticsearchEngineTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ public function test_map_correctly_maps_results_to_models()
114114

115115
$model = Mockery::mock('Illuminate\Database\Eloquent\Model');
116116
$model->shouldReceive('getScoutKey')->andReturn('1');
117-
$model->shouldReceive('getScoutModelsByIds')->once()->with($builder, ['1'])->andReturn(Collection::make([$model]));
117+
$model->shouldReceive('getScoutModelsByIds')->once()->with($builder, ['1'])->andReturn($models = Collection::make([$model]));
118+
$model->shouldReceive('newCollection')->andReturn($models);
118119

119120
$results = $engine->map($builder, [
120121
'hits' => [

0 commit comments

Comments
 (0)