From 7b6e4c9d04a60b8e6eaf62df6630a0cbf1122173 Mon Sep 17 00:00:00 2001 From: Kiko Seijo Date: Sun, 26 Nov 2017 16:57:01 +0100 Subject: [PATCH 1/2] Pagination functionality. --- README.md | 3 ++ .../Eloquent/AbstractRepository.php | 40 +++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7f11d9e..0442838 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,9 @@ Default methods of the `Kurt\Repoist\Repositories\Eloquent\AbstractRepository`. | **update** | $repo->update($id, array $properties); | **delete** | $repo->delete($id); +Comes with a integrated pagination functions that uses `Illuminate\Pagination\LengthAwarePaginator` to +return a paginated response if $request->limit > 0 + ## Example Usage Customer.php diff --git a/src/Repositories/Eloquent/AbstractRepository.php b/src/Repositories/Eloquent/AbstractRepository.php index 3f379bd..400076d 100644 --- a/src/Repositories/Eloquent/AbstractRepository.php +++ b/src/Repositories/Eloquent/AbstractRepository.php @@ -3,9 +3,11 @@ namespace Kurt\Repoist\Repositories\Eloquent; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Pagination\LengthAwarePaginator; use Kurt\Repoist\Exceptions\NoEntityDefined; use Kurt\Repoist\Repositories\Contracts\RepositoryInterface; use Kurt\Repoist\Repositories\Criteria\CriteriaInterface; +use Illuminate\Http\Request; abstract class AbstractRepository implements RepositoryInterface, CriteriaInterface { @@ -14,9 +16,16 @@ abstract class AbstractRepository implements RepositoryInterface, CriteriaInterf */ protected $entity; - public function __construct() + /** + * @var Illuminate\Http\Request + */ + protected $request; + + + public function __construct(Request $request) { $this->entity = $this->resolveEntity(); + $this->request = $request; } /** @@ -99,7 +108,7 @@ public function findWhereLike($columns, $value, $paginate = null) */ public function paginate($perPage = 10) { - return $this->entity->paginate($perPage); + return $this->processPagination($this->entity, $perPage); } /** @@ -156,6 +165,31 @@ protected function resolveEntity() private function processPagination($query, $paginate) { - return $paginate ? $query->paginate($paginate) : $query->get(); + return $this->paginateIf($query>get(), $paginate); + } + + private function paginateIf($records, $per_page) + { + + if ($per_page>0) { + // We can bypass and continue... + } elseif ($this->request->input('limit') > 0){ + // $per_page=null, but we could try find "limit" form request + $per_page = ? $this->request->input('limit') : 0; + } else { + return $records; + } + + $page = $this->request->input('page') > 0 ? $this->request->input('page') : 1; + $offset = ($page * $per_page) - $per_page; + + return new LengthAwarePaginator( + array_slice($records->toArray(), $offset, $per_page, true), + $records->count(), + $per_page, + $page, + ['path' => $this->request->url(), 'query' => $this->request->query()] + ); + } } From 54c7a093176a1c15f1ef033642a34c264563b805 Mon Sep 17 00:00:00 2001 From: Kiko Seijo Date: Sun, 26 Nov 2017 17:08:55 +0100 Subject: [PATCH 2/2] Quick fix. --- src/Repositories/Eloquent/AbstractRepository.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Repositories/Eloquent/AbstractRepository.php b/src/Repositories/Eloquent/AbstractRepository.php index 400076d..28ae0a2 100644 --- a/src/Repositories/Eloquent/AbstractRepository.php +++ b/src/Repositories/Eloquent/AbstractRepository.php @@ -25,7 +25,7 @@ abstract class AbstractRepository implements RepositoryInterface, CriteriaInterf public function __construct(Request $request) { $this->entity = $this->resolveEntity(); - $this->request = $request; + $this->request = $request; // reading request here allows many options. } /** @@ -175,7 +175,7 @@ private function paginateIf($records, $per_page) // We can bypass and continue... } elseif ($this->request->input('limit') > 0){ // $per_page=null, but we could try find "limit" form request - $per_page = ? $this->request->input('limit') : 0; + $per_page = $this->request->input('limit'); } else { return $records; }