diff --git a/.travis.yml b/.travis.yml index 479ef99..db70045 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: php php: - 7.0 - - 5.6.6 before_script: - sleep 10 diff --git a/composer.json b/composer.json index 348187d..91c8f6f 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "keywords": ["laravel", "scout", "elasticsearch", "elastic"], "require": { "php": ">=5.6.4", - "laravel/scout": "^3.0|^4.0", + "laravel/scout": "^5.0", "elasticsearch/elasticsearch": "^5.0" }, "require-dev": { diff --git a/src/ElasticsearchEngine.php b/src/ElasticsearchEngine.php index 61c86de..1a65944 100644 --- a/src/ElasticsearchEngine.php +++ b/src/ElasticsearchEngine.php @@ -204,11 +204,12 @@ public function mapIds($results) /** * Map the given results to instances of the given model. * + * @param \Laravel\Scout\Builder $builder * @param mixed $results * @param \Illuminate\Database\Eloquent\Model $model * @return Collection */ - public function map($results, $model) + public function map(Builder $builder, $results, $model) { if ($results['hits']['total'] === 0) { return Collection::make(); @@ -217,9 +218,11 @@ public function map($results, $model) $keys = collect($results['hits']['hits']) ->pluck('_id')->values()->all(); - $models = $model->whereIn( - $model->getKeyName(), $keys - )->get()->keyBy($model->getKeyName()); + $models = $model->getScoutModelsByIds( + $builder, $keys + )->keyBy(function ($model) { + return $model->getScoutKey(); + }); return collect($results['hits']['hits'])->map(function ($hit) use ($model, $models) { return isset($models[$hit['_id']]) ? $models[$hit['_id']] : null; diff --git a/tests/ElasticsearchEngineTest.php b/tests/ElasticsearchEngineTest.php index d4bc6b5..11b3bf1 100644 --- a/tests/ElasticsearchEngineTest.php +++ b/tests/ElasticsearchEngineTest.php @@ -1,6 +1,7 @@ shouldReceive('getKeyName')->andReturn('id'); - $model->shouldReceive('whereIn')->once()->with('id', ['1'])->andReturn($model); - $model->shouldReceive('get')->once()->andReturn(Collection::make([new ElasticsearchEngineTestModel])); + $model->shouldReceive('getScoutKey')->andReturn('1'); + $model->shouldReceive('getScoutModelsByIds')->once()->with($builder, ['1'])->andReturn(Collection::make([$model])); - $results = $engine->map([ + $results = $engine->map($builder, [ 'hits' => [ 'total' => '1', 'hits' => [