saritasa/laravel-repositories
最新稳定版本:4.0.0
Composer 安装命令:
composer require saritasa/laravel-repositories
包简介
Saritasa repository pattern implementation for Laravel
关键字:
README 文档
README
Implementation of Repository pattern for Laravel (on top of Eloquent)
Laravel 5.5+
Install the saritasa/laravel-repositories package:
$ composer require saritasa/laravel-repositories
Configuration
- Publish configuration file:
php artisan vendor:publish --tag=laravel_repositories
- Register custom repositories implementation:
return [ 'bindings' => [ \App\Models\User::class => \App\Repositories\UserRepository::class, ], ];
Note: Your custom repository must implement IRepository contract.
Getting repository inside your code
To get specific repository in your code you can just build with DI container repositories factory and then
build needed for your repository in this factory.
Example:
$repositoryFactory = app(\Saritasa\LaravelRepositories\Repositories\IRepositoryFactory::class); $userRepository = $repositoryFactory->getRepository(\App\Models\User::class);
Filtering results with repository
Methods findWhere/getWhere/getWith/getPage/getCursorPage/count/ can receive criteria as params Here the examples of available syntax:
- Criterion without operator:
$criteria = [ 'field1' => 'value1', 'field2' => 1, ];
In this case = operator and and boolean between them will be used.
Example: ... 'field1 = 'value1' and 'field2' = 1 ...
- Criterion with operator:
$criteria = [ ['field1', '<>', 'value1'], ['field2', '>', 1, 'or'], ['field3', 'in', [1, 2]], ['field4', 'not in', new \Illuminate\Support\Collection([1, 2])], ];
Important: arrays and collection can be used only with in and not in operators.
Note: As 4th parameter you can pass boolean or/and (and uses by default).
But you should remember that boolean used between current and previous criterion
Example: ... 'field1 <> 'value1' or 'field2' > 1 and 'field3' in (1, 2) and 'field4' not in (1, 2) ...
- Criterion as DTO:
$criteria = [ new Criterion([ Criterion::OPERATOR => '<>', Criterion::VALUE => 'value1', Criterion::ATTRIBUTE => 'field1', ]), new Criterion([ Criterion::OPERATOR => '>', Criterion::VALUE => 1, Criterion::ATTRIBUTE => 'field2', Criterion::BOOLEAN => 'or', ]), new Criterion([ Criterion::OPERATOR => 'in', Criterion::VALUE => [1, 2], Criterion::ATTRIBUTE => 'field3', ]), new Criterion([ Criterion::OPERATOR => 'not in', Criterion::VALUE => [1, 2], Criterion::ATTRIBUTE => 'field4', ]), ];
Result will be the same as in previous example.
- Nested criteria:
You can group different conditions that gives flexibility in getting data from repository
$criteria = [ [ ['field1', '<>', 'value1'], ['field2', '>', 1, 'or'], ], [ ['field3', 'in', [1, 2]], ['field4', 'not in', [1, 2], 'boolean' => 'or', ], ];
Note: you can add nesting level in any depth what you want. To use or condition between one group
and other(group and non-group condition) you can pass 'boolean' parameter in the same level as other conditions.
Example:... ('field1 <> 'value1' or 'field2' > 1) or ('field3' in (1, 2) and 'field4' not in (1, 2)) ...
- Relation existence criterion:
You can build queries to check on existence any model relations
$criteria = [ new RelationCriterion('roles', [['slug', 'in', [1, 2]]], 'or'), ];
Preload model relations
Method getWith() method allows to retrieve list of entities with
eager loaded related models and related models counts. Also allows to filter this list by given criteria
and sort in requested order.
Example:
$usersRepository->getWith( ['role', 'supervisors'], ['phones'], [], new Saritasa\LaravelRepositories\DTO\SortOptions('name', 'DESC') );
- Each user will be retrieved with pre-loaded role and supervisors models.
- Each user will be retrieved with pre-loaded phones relation count.
- List of users will be ordered by requested sort options.
Exceptions
Repository Exception
Base exception for repository layer.
Repository register exception
Throws when can not register custom repository.
Model not found Exception
Throws in case when some model not exists in storage.
Bad Criteria Exception
Throws when provided criteria has incorrect format at least in one criterion inside.
Contributing
- Create fork, checkout it
- Develop locally as usual. Code must follow PSR-1, PSR-2 -
run PHP_CodeSniffer to ensure, that code follows style guides - Cover added functionality with unit tests and run PHPUnit to make sure, that all tests pass
- Update README.md to describe new or changed functionality
- Add changes description to CHANGES.md file. Use Semantic Versioning convention to determine next version number.
- When ready, create pull request
Make shortcuts
If you have GNU Make installed, you can use following shortcuts:
make cs(instead ofphp vendor/bin/phpcs) -
run static code analysis with PHP_CodeSniffer
to check code stylemake csfix(instead ofphp vendor/bin/phpcbf) -
fix code style violations with PHP_CodeSniffer
automatically, where possible (ex. PSR-2 code formatting violations)make test(instead ofphp vendor/bin/phpunit) -
run tests with PHPUnitmake install- instead ofcomposer installmake allor justmakewithout parameters -
invokes described above install, cs, test tasks sequentially -
project will be assembled, checked with linter and tested with one single command
Resources
saritasa/laravel-repositories 适用场景与选型建议
saritasa/laravel-repositories 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 17.4k 次下载、GitHub Stars 达 3, 最近一次更新时间为 2017 年 06 月 02 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「database」 「repository」 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 saritasa/laravel-repositories 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 saritasa/laravel-repositories 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 saritasa/laravel-repositories 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Dibi is Database Abstraction Library for PHP
repository php library
Store your language lines in the database, yaml or other sources
A package for automatically encrypting and decrypting Eloquent attributes in Laravel 5.5+, based on configuration settings.
A PSR-7 compatible library for making CRUD API endpoints
Laravel 5 - Repositories to the database layer
统计信息
- 总下载量: 17.4k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 20
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-06-02