kelcampus / laravel-repository
Artesãos Warehouse Tag 3.0.0 包件的副本,调整以适应 Laravel 10
1.10.0
2023-07-10 18:28 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^10.0
- illuminate/database: ^10.0
- illuminate/pagination: ^10.0
- illuminate/support: ^10.0
- league/fractal: ~0.20
Requires (Dev)
- illuminate/container: ^10.0
- illuminate/http: ^10.0
README
Artesãos Warehouse Tag 3.0.0 包件的副本,来源自 https://github.com/artesaos/warehouse
已调整以与 Laravel 7、Laravel 8、Laravel 9 一起使用。
如何使用
从 https://github.com/artesaos/warehouse 移植而来
Warehouse v2 是一个基础包,它实现了一些基本功能而没有定义任何业务规则。有两个基础类: BaseRepository
和 AbstractCrudRepository
BaseRepository
这个类实现了 BaseRepository
协议,该协议有三个签名
/** * Returns all records. * If $take is false then brings all records * If $paginate is true returns Paginator instance. * * @param int $take * @param bool $paginate * * @return EloquentCollection|Paginator */ public function getAll($take = 15, $paginate = true);
/** * Retrieves a record by his id * If $fail is true fires ModelNotFoundException. When no record is found. * * @param int $id * @param bool $fail * * @return Model */ public function findByID($id, $fail = true);
/** * @param string $column * @param string|null $key * * @return \Illuminate\Support\Collection|array */ public function lists($column, $key = null);
在实现中,BaseRepository
提供了两个受保护的方法 newQuery()
和 doQuery($query = null, $take = 15, $paginate = true)
。它们在仓库中得到了广泛的使用。
newQuery
newQuery 返回一个 eloquent 的 QueryBuilder 对象,基于 modelClass
属性。
protected function newQuery() { return app()->make($this->modelClass)->newQuery(); }
这个属性需要在所有仓库类中定义
doQuery
doQuery 处理查询并返回一个 collection 或一个对象 paginate,具体取决于传入的参数
protected function doQuery($query = null, $take = 15, $paginate = true) { if (is_null($query)) { $query = $this->newQuery(); } if (true == $paginate): return $query->paginate($take); endif; if ($take > 0 || false != $take) { $query->take($take); } return $query->get(); }