Skip to content

Commit 886a733

Browse files
authored
Merge pull request #1 from devmakerlab/(feat)readme.md
Creation of readme.md
2 parents 28c06fa + 118a492 commit 886a733

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
}
2525
],
2626
"require": {
27+
"php": "^7.4|^8.0",
2728
"illuminate/database": "^8.50"
2829
},
2930
"require-dev": {

readme.md

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<p align="center">
2+
<img src="https://user-images.githubusercontent.com/51158042/126819815-69be48fa-40a8-49e4-81ca-d3ebc1d3d521.png">
3+
</p>
4+
5+
# DevMakerLab/Laravel-Filters
6+
7+
Need some filters? This package is based on the Repository Design Pattern to let you create specific queries easily.
8+
9+
* [Installation](#installation)
10+
* [Usage](#usage)
11+
* [Example](#example)
12+
13+
## Installation
14+
<small>⚠️ Requires >= PHP 7.4 ⚠️</small>
15+
```shell
16+
composer require devmakerlab/laravel-filters
17+
```
18+
19+
## Usage
20+
21+
This package offers an abstract class `AbstractFilterableRepository` which needs to be extended to implement the features of this package.
22+
23+
PeopleRepository.php
24+
```php
25+
<?php
26+
27+
declare(strict_types=1);
28+
29+
use DevMakerLab\LaravelFilters\AbstractFilterableRepository;
30+
31+
class PeopleRepository extends AbstractFilterableRepository
32+
{
33+
private DatabaseManager $databaseManager;
34+
35+
public function __construct(DatabaseManager $databaseManager)
36+
{
37+
$this->databaseManager = $databaseManager;
38+
}
39+
40+
public function get(array $args): array
41+
{
42+
$queryBuilder = $this->databaseManager->table('people')
43+
->select(['firstname', 'lastname', 'age', 'gender']);
44+
45+
$this->applyFilters($queryBuilder, $args);
46+
47+
$people = $queryBuilder->get();
48+
49+
return $this->transform($people);
50+
}
51+
52+
public function transform(Collection $people): array
53+
{
54+
$people->transform(function ($person) {
55+
return [
56+
'name' => sprintf('%s %s', $person->lastname, $person->firstname),
57+
'age' => $person->age,
58+
'gender' => $person->gender,
59+
];
60+
});
61+
62+
return $people->toArray();
63+
}
64+
}
65+
```
66+
67+
PeopleService.php
68+
```php
69+
<?php
70+
...
71+
$peopleRepository = new PeopleRepository($databaseManager);
72+
73+
$people = $peopleRepository
74+
->addFilter(OldPeopleFilter::class)
75+
->get(['age' => 60]);
76+
```
77+
78+
OldPeopleFilter.php
79+
```php
80+
<?php
81+
82+
declare(strict_types=1);
83+
84+
use Illuminate\Database\Query\Builder;
85+
86+
class OldPeopleFilter implements FilterInterface
87+
{
88+
public static function neededKeys(): array
89+
{
90+
return ['age'];
91+
}
92+
93+
public static function isApplicable(...$args): bool
94+
{
95+
return true;
96+
}
97+
98+
public function apply(Builder &$queryBuilder, ...$args): void
99+
{
100+
$age = $args[0][self::neededKeys()[0]];
101+
102+
$queryBuilder->where('age', '>=', $age);
103+
}
104+
}
105+
```
106+
107+
## Example
108+
109+
[Usage Example](https://github.com/devmakerlab/laravel-filters/tree/master/tests/Example) of DevMakerLab/Laravel-Filters package.

0 commit comments

Comments
 (0)