Skip to content

Commit d673d21

Browse files
authored
Merge pull request #532 from francoism90/master
Add LengthAwarePaginator to QueryBuilder
2 parents e17fbfc + 642c14c commit d673d21

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

src/QueryBuilder.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Illuminate\Database\Eloquent\Model;
88
use Illuminate\Database\Eloquent\Relations\Relation;
99
use Illuminate\Http\Request;
10+
use Illuminate\Pagination\LengthAwarePaginator;
1011
use Illuminate\Support\Collection;
1112
use Illuminate\Support\Traits\ForwardsCalls;
1213
use Spatie\QueryBuilder\Concerns\AddsFieldsToQuery;
@@ -113,6 +114,10 @@ public function __call($name, $arguments)
113114
$this->addAppendsToResults($result);
114115
}
115116

117+
if ($result instanceof LengthAwarePaginator) {
118+
$this->addAppendsToResults(collect($result->items()));
119+
}
120+
116121
return $result;
117122
}
118123

tests/AppendTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
namespace Spatie\QueryBuilder\Tests;
44

5+
use Illuminate\Database\Eloquent\Model;
56
use Illuminate\Http\Request;
7+
use Illuminate\Pagination\LengthAwarePaginator;
8+
use Illuminate\Support\Collection;
69
use Spatie\QueryBuilder\Exceptions\InvalidAppendQuery;
710
use Spatie\QueryBuilder\QueryBuilder;
811
use Spatie\QueryBuilder\Tests\TestClasses\Models\AppendModel;
@@ -48,6 +51,28 @@ public function it_can_append_case_insensitive()
4851
$this->assertAttributeLoaded($model, 'fullname');
4952
}
5053

54+
/** @test */
55+
public function it_can_append_collections()
56+
{
57+
$models = $this
58+
->createQueryFromAppendRequest('FullName')
59+
->allowedAppends('fullname')
60+
->get();
61+
62+
$this->assertCollectionAttributeLoaded($models, 'fullname');
63+
}
64+
65+
/** @test */
66+
public function it_can_append_paginates()
67+
{
68+
$models = $this
69+
->createQueryFromAppendRequest('FullName')
70+
->allowedAppends('fullname')
71+
->paginate();
72+
73+
$this->assertPaginateAttributeLoaded($models, 'fullname');
74+
}
75+
5176
/** @test */
5277
public function it_guards_against_invalid_appends()
5378
{
@@ -114,4 +139,24 @@ protected function assertAttributeLoaded(AppendModel $model, string $attribute)
114139
{
115140
$this->assertTrue(array_key_exists($attribute, $model->toArray()));
116141
}
142+
143+
protected function assertCollectionAttributeLoaded(Collection $collection, string $attribute)
144+
{
145+
$hasModelWithoutAttributeLoaded = $collection
146+
->contains(function (Model $model) use ($attribute) {
147+
return ! array_key_exists($attribute, $model->toArray());
148+
});
149+
150+
$this->assertFalse($hasModelWithoutAttributeLoaded, "The `{$attribute}` attribute was expected but not loaded.");
151+
}
152+
153+
protected function assertPaginateAttributeLoaded(LengthAwarePaginator $collection, string $attribute)
154+
{
155+
$hasModelWithoutAttributeLoaded = $collection
156+
->contains(function (Model $model) use ($attribute) {
157+
return ! array_key_exists($attribute, $model->toArray());
158+
});
159+
160+
$this->assertFalse($hasModelWithoutAttributeLoaded, "The `{$attribute}` attribute was expected but not loaded.");
161+
}
117162
}

0 commit comments

Comments
 (0)