buqiu / repository
Laravel Repository 是 Laravel 的一个软件包,用于抽象数据库层。 这使应用程序易于维护。
Installs: 1 541
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 2
Open Issues: 0
Requires
- php: >=7.2.0
- illuminate/console: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/database: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/filesystem: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- phpunit/phpunit: ^8.3
README
Laravel Repository 是 Laravel 的一个软件包,用于抽象数据库层。 这使应用程序易于维护。
安装
从终端运行以下命令:
composer require buqiu/repository
使用
首先,使用以下命令创建存储库类:
php artisan make:repository Film
其中 Film
是现有模型的名称.如果模型不存在,它将为您生成.
最后,在控制器中使用存储库:
<?php namespace App\Http\Controllers; use App\Repository\UserRepository; class FilmsController extends Controller { /** * @var UserRepository */ private $filmRepository; public function __construct(UserRepository $userRepository) { $this->filmRepository = $userRepository; } /** * @return mixed */ public function index() { return response()->json($this->userRepository->all()); } }
发布配置
如果您希望覆盖存储库和条件所在的路径,请发布配置文件:
php artisan vendor:publish --provider="Buqiu\Repository\Providers\RepositoryProvider"
然后只需打开 config/repositories.php
并编辑即可!
可用方法
可以使用以下方法: Buqiu\Repository\Contracts\RepositoryInterface
public function all($columns = ['*']) public function lists($value, $key = null) public function paginate($perPage = 1, $columns = ['*'], $method = 'full'); public function create(array $data) // 如果你使用的是 mongodb,则需要指定主键 $attribute public function update(array $data, $id, $attribute = 'id') public function destroy($id) public function destroyWhere(array $attributes) public function orderBy(string $columns, $direction = 'ASC') public function with(array $relations) public function withCount($relations) public function whereIn(string $attribute, array $data) public function whereHas(string $relation, \Closure $callback = null) public function orWhereHas(string $relation, \Closure $callback = null) public function find($id, $columns = ['*']) public function findByField($field, $value, $columns = ['*']) public function getByField($field, $value, $columns = ['*']) public function findByAttributes(array $attributes = [], array $columns = array('*')) public function getByAttributes(array $attributes = [], array $columns = array('*')) public function paginateByAttributes(array $attributes = [], int $perPage = 20, array $columns = array('*'), $method = 'full')
Buqiu\Repository\Contracts\CriteriaInterface
public function apply($model, Repository $repository)
用法示例
在存储库中创建新 user
$this->userRepository->create(Input::all());
更新现用的 user
$this->userRepository->update(Input::all(), $user_id);
删除 user
$this->userRepository->destroy($id);
通过 user_id
查找 user
$this->userRepository->find($id);
您还可以选择要提取的字段
$this->userRepository->find($id, ['name', 'mobile', 'email']);
根据单个条件查询单条数据
$this->userRepository->findByField('mobile', $mobile);
或者你可以通过单个条件获取所有数据
$this->userRepository->getByField('user_id', $user_id);
根据多个字段获取所有结果
$this->userRepository->getByAttributes([ 'sex' => $sex, ['year', '>', '$year'] ]);
根据属性条件获取多条并且分页数据
$this->userRepository->paginateByAttributes([ 'sex' => $sex, ['year', '>', '$year'] ]);
Criteria(标准)
标准是将特定标准或标准集应用于存储库查询的简单方法。
要创建一个Criteria类,请运行以下命令:
php artisan make:criteria LengthOverTwoHours --model=user
以下是示例条件:
<?php namespace App\Repository\Criteria\Films; use Buqiu\Repository\Criteria\Criteria; use Buqiu\Repository\Contracts\RepositoryInterface; class LengthOverTwoHours extends Criteria { /** * @param $model * @param RepositoryInterface $repository * * @return Model */ public function apply($model, RepositoryInterface $repository) { return $model->where('length', '>', 120); } }
现在,在控制器类内部,您可以调用pushCriteria方法:
<?php namespace App\Http\Controllers; use App\Repositories\FilmRepository; use App\Repositories\Criteria\Films\LengthOverTwoHours; class FilmsController extends Controller { /** * @var FilmRepository */ private $filmRepository; public function __construct(FilmRepository $filmRepository) { $this->filmRepository = $filmRepository; } public function index() { $this->filmRepository->pushCriteria(new LengthOverTwoHours()); return response()->json($this->filmRepository->all()); } }
测试
$ vendor/bin/phpunit
license
Pouch is released under the MIT License.