Skip to content

Commit b862dd1

Browse files
authored
Merge pull request #334 from driesvints/fix-collections
[6.0] Use Model collection where appropriate
2 parents a05a238 + e94938d commit b862dd1

File tree

7 files changed

+19
-23
lines changed

7 files changed

+19
-23
lines changed

src/Builder.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Illuminate\Pagination\Paginator;
66
use Illuminate\Support\Traits\Macroable;
7-
use Illuminate\Database\Eloquent\Collection;
87
use Illuminate\Pagination\LengthAwarePaginator;
98

109
class Builder
@@ -267,7 +266,7 @@ public function paginate($perPage = null, $pageName = 'page', $page = null)
267266

268267
$perPage = $perPage ?: $this->model->getPerPage();
269268

270-
$results = Collection::make($engine->map(
269+
$results = $this->model->newCollection($engine->map(
271270
$this, $rawResults = $engine->paginate($this, $perPage, $page), $this->model
272271
));
273272

src/Engines/AlgoliaEngine.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Laravel\Scout\Builder;
66
use AlgoliaSearch\Client as Algolia;
7-
use Illuminate\Database\Eloquent\Collection;
87
use Illuminate\Database\Eloquent\SoftDeletes;
98

109
class AlgoliaEngine extends Engine
@@ -171,20 +170,16 @@ public function mapIds($results)
171170
public function map(Builder $builder, $results, $model)
172171
{
173172
if (count($results['hits']) === 0) {
174-
return Collection::make();
173+
return $model->newCollection();
175174
}
176175

177-
$models = $model->getScoutModelsByIds(
178-
$builder, collect($results['hits'])->pluck('objectID')->values()->all()
179-
)->keyBy(function ($model) {
180-
return $model->getScoutKey();
181-
});
176+
$objectIds = collect($results['hits'])->pluck('objectID')->values()->all();
182177

183-
return Collection::make($results['hits'])->map(function ($hit) use ($models) {
184-
if (isset($models[$hit['objectID']])) {
185-
return $models[$hit['objectID']];
186-
}
187-
})->filter()->values();
178+
return $model->getScoutModelsByIds(
179+
$builder, $objectIds
180+
)->filter(function ($model) use ($objectIds) {
181+
return in_array($model->getScoutKey(), $objectIds);
182+
});
188183
}
189184

190185
/**

src/Engines/Engine.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Laravel\Scout\Engines;
44

55
use Laravel\Scout\Builder;
6-
use Illuminate\Database\Eloquent\Collection;
76

87
abstract class Engine
98
{
@@ -94,8 +93,8 @@ public function keys(Builder $builder)
9493
*/
9594
public function get(Builder $builder)
9695
{
97-
return Collection::make($this->map(
96+
return $this->map(
9897
$builder, $this->search($builder), $builder->model
99-
));
98+
);
10099
}
101100
}

src/Engines/NullEngine.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Laravel\Scout\Builder;
66
use Illuminate\Database\Eloquent\Collection;
7+
use Illuminate\Support\Collection as BaseCollection;
78

89
class NullEngine extends Engine
910
{
@@ -61,7 +62,7 @@ public function paginate(Builder $builder, $perPage, $page)
6162
*/
6263
public function mapIds($results)
6364
{
64-
return Collection::make();
65+
return BaseCollection::make();
6566
}
6667

6768
/**

src/Searchable.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Laravel\Scout;
44

55
use Laravel\Scout\Jobs\MakeSearchable;
6-
use Illuminate\Database\Eloquent\Collection;
76
use Illuminate\Database\Eloquent\SoftDeletes;
87
use Illuminate\Support\Collection as BaseCollection;
98

@@ -137,7 +136,7 @@ public static function makeAllSearchable()
137136
*/
138137
public function searchable()
139138
{
140-
Collection::make([$this])->searchable();
139+
$this->newCollection([$this])->searchable();
141140
}
142141

143142
/**
@@ -159,7 +158,7 @@ public static function removeAllFromSearch()
159158
*/
160159
public function unsearchable()
161160
{
162-
Collection::make([$this])->unsearchable();
161+
$this->newCollection([$this])->unsearchable();
163162
}
164163

165164
/**

tests/AlgoliaEngineTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ public function test_map_correctly_maps_results_to_models()
6363
$model = m::mock('StdClass');
6464
$model->shouldReceive('newQuery')->andReturn($model);
6565
$model->shouldReceive('getKeyName')->andReturn('id');
66-
$model->shouldReceive('getScoutModelsByIds')->andReturn(Collection::make([new AlgoliaEngineTestModel]));
66+
$model->shouldReceive('getScoutModelsByIds')->andReturn($models = Collection::make([new AlgoliaEngineTestModel]));
67+
$model->shouldReceive('newCollection')->andReturn($models);
6768

6869
$builder = m::mock(Builder::class);
6970

tests/BuilderTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ public function test_pagination_correctly_handles_paginated_results()
3030
$model->shouldReceive('searchableUsing')->andReturn($engine = m::mock());
3131

3232
$engine->shouldReceive('paginate');
33-
$engine->shouldReceive('map')->andReturn(Collection::make([new stdClass]));
33+
$engine->shouldReceive('map')->andReturn($results = Collection::make([new stdClass]));
3434
$engine->shouldReceive('getTotalCount');
3535

36+
$model->shouldReceive('newCollection')->andReturn($results);
37+
3638
$builder->paginate();
3739
}
3840

0 commit comments

Comments
 (0)