kelcampus / laravel-repository
Cópia do pacote Artesãos Warehouse Tag 3.0.0 ajustado para o Laravel 10
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
Cópia do pacote https://github.com/artesaos/warehouse
Ajustado para funcionar com Laravel 7, Laravel 8, Laravel 9.
Como usar
Retirado de https://github.com/artesaos/warehouse
Warehouse v2 é um pacote base, ele implementa o básico sem nenhuma regra de negócio definida.
Há duas classes base: BaseRepository
e AbstractCrudRepository
BaseRepository
Esta classe implementa o contrato BaseRepository
, que possui três assinaturas:
/** * 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);
Já na implementação, BaseRepository
disponibiliza dois métodos protegidos newQuery()
e doQuery($query = null, $take = 15, $paginate = true)
. Eles são amplamente usados nos repositórios.
newQuery
newQuery retorna um objeto QueryBuilder do eloquent, à partir da propriedade modelClass
.
protected function newQuery() { return app()->make($this->modelClass)->newQuery(); }
Essa propriedade precisa ser definida em todos as classes repositório
doQuery
doQuery processa a query e retorna uma collection ou um objeto paginate, dependendo dos parametros passados
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(); }