devmakerlab / laravel-filters
v1.4
2024-01-26 11:25 UTC
Requires
- php: ^7.4|^8.0
- illuminate/database: ^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- devmakerlab/entities: ^3.1
- orchestra/testbench: ^6.19|^7.0|^8.2
- phpunit/phpunit: ^10.1
- symfony/var-dumper: ^5.3|^6.0|^7.0
This package is auto-updated.
Last update: 2024-09-26 13:03:01 UTC
README
DevMakerLab/Laravel-Filters
需要一些过滤器吗?此包基于Repository Design Pattern,让您轻松创建特定查询。
安装
⚠️ 需要 >= PHP 7.4 ⚠️
composer require devmakerlab/laravel-filters
用法
此包提供了一个抽象类AbstractFilterableRepository
,需要扩展以实现此包的功能。
PeopleService.php
<?php ... $peopleRepository = new PeopleRepository($databaseManager); $people = $peopleRepository ->addFilter(OldPeopleFilter::class) ->get(['age' => 60]);
OldPeopleFilter.php
<?php declare(strict_types=1); use Illuminate\Database\Query\Builder; use DevMakerLab\LaravelFilters\AbstractFilter; class OldPeopleFilter extends AbstractFilter { public int $age; public function apply(Builder $queryBuilder): void { $queryBuilder->where('age', '>=', $this->age); } }
PeopleRepository.php
<?php declare(strict_types=1); use DevMakerLab\LaravelFilters\AbstractFilterableRepository; class PeopleRepository extends AbstractFilterableRepository { private DatabaseManager $databaseManager; public function __construct(DatabaseManager $databaseManager) { $this->databaseManager = $databaseManager; } public function get(array $args): array { $queryBuilder = $this->databaseManager->table('people') ->select(['firstname', 'lastname', 'age', 'gender']); $this->applyFilters($queryBuilder, $args); $people = $queryBuilder->get(); return $this->transform($people); } public function transform(Collection $people): array { $people->transform(function ($person) { return [ 'name' => sprintf('%s %s', $person->lastname, $person->firstname), 'age' => $person->age, 'gender' => $person->gender, ]; }); return $people->toArray(); } }