PHPackages                             artesaos/warehouse - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. artesaos/warehouse

AbandonedArchivedLibrary[Database &amp; ORM](/categories/database)

artesaos/warehouse
==================

Artesãos Warehouse V2 - A simple and direct approach to repositories!

3.0.0(9y ago)879.3k13[4 issues](https://github.com/artesaos/warehouse/issues)4MITPHPPHP &gt;=5.4.0

Since Mar 20Pushed 6y ago2 watchersCompare

[ Source](https://github.com/artesaos/warehouse)[ Packagist](https://packagist.org/packages/artesaos/warehouse)[ RSS](/packages/artesaos-warehouse/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (3)Dependencies (7)Versions (13)Used By (4)

Artesãos Warehouse V2 - A simple and direct approach to repositories!
=====================================================================

[](#artesãos-warehouse-v2---a-simple-and-direct-approach-to-repositories)

[![Total Downloads](https://camo.githubusercontent.com/f2f8fcfb6aa23ea1424ab536351a5b974d83f05eea133dd074c6e36352401240/68747470733a2f2f706f7365722e707567782e6f72672f6172746573616f732f77617265686f7573652f646f776e6c6f6164732e737667)](https://packagist.org/packages/artesaos/warehouse)[![Latest Stable Version](https://camo.githubusercontent.com/6be39a64e7a411768ccd7522822e967e3c89d3761e91b0152ce8c70ef13d672c/68747470733a2f2f706f7365722e707567782e6f72672f6172746573616f732f77617265686f7573652f762f737461626c652e737667)](https://packagist.org/packages/artesaos/warehouse)[![Latest Unstable Version](https://camo.githubusercontent.com/db25475b3850fbddc9c2c11b0862f802f9a9272dc67f5f72d851f0b985dda772/68747470733a2f2f706f7365722e707567782e6f72672f6172746573616f732f77617265686f7573652f762f756e737461626c652e737667)](https://packagist.org/packages/artesaos/warehouse)[![License](https://camo.githubusercontent.com/3e38de3baf3ba78dc9a0b4162e621043c79581dc072302d223d22baf365b5b78/68747470733a2f2f706f7365722e707567782e6f72672f6172746573616f732f77617265686f7573652f6c6963656e73652e737667)](https://packagist.org/packages/artesaos/warehouse)

O que é Warehouse V2?
---------------------

[](#o-que-é-warehouse-v2)

Warehouse v2 é um pacote um pouco atípico, já que você pode usá-lo sem precisar baixá-lo. Ele se classificaria melhor como uma demonstração pronta para o uso.

Muito se fala sobre o padrão de projeto Repository, basicamente ele é uma camada a mais entre sua aplicação e o banco de dados, no caso do Laravel sendo responsável direto por agir sobre seus models e queries.

### O que é *Repository Pattern* ?

[](#o-que-é-repository-pattern-)

Basicamente é a camada onde você executa seus comandos no banco de dados.

Há muita filosofia por trás desse modelo. No seu modo mais puro os métodos de um repositório não retornam objetos complexos ou que possuam alguma dependência, retornam arrays ou objetos simples (*StdClass*). Isso por que um de seus objetivos é permitir a troca de um repositório que trabalha com MySQL por exemplo, por um que trabalhe com MongoDB.

#### O mundo real hoje

[](#o-mundo-real-hoje)

OK! Tudo muito lindo, no papel. Não são todos os projetos que precisam de uma abordagem assim, se você usa o Laravel, abrir mão do Eloquent não é algo que todos cogitem fazer. E trocar de banco de dados no Laravel não é uma tarefa tão complexa, graças ao Eloquent.

> Devido a facilidade e praticidade que o Eloquent e Collections trazem, este pacote não retorna objetos planos e sim objetos Eloquent e Collections.

Muitos não sabem e outros se esquecem que outro objetivo de um repositório é organizar e centralizar suas consultas e até mesmo regras de negócio. Essa é a principal abordagem que o Warehouse V2 pretende suprir.

---

Instalando
----------

[](#instalando)

Execute `composer require artesaos/warehouse 2.x-dev`

No arquivo `config/app.php` adcione o service provider `Artesaos\Warehouse\WarehouseServiceProvider`

```
'providers' => [
    // ...
    Artesaos\Warehouse\WarehouseServiceProvider::class,
    // ...
],
```

> Este processo não é obrigatório. Você só precisa fazer isso caso esteja usando o Fractal.

Como usar
---------

[](#como-usar)

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

[](#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)

*newQuery* retorna um objeto [QueryBuilder](https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Builder.php) 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)

*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();
}
```

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance19

Infrequent updates — may be unmaintained

Popularity39

Limited adoption so far

Community26

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 62% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~54 days

Total

11

Last Release

3568d ago

Major Versions

1.0.1 → 2.0-beta12015-12-29

v2.x-dev → 3.0-alpha12016-09-06

### Community

Maintainers

![](https://www.gravatar.com/avatar/87433b0d6b98d16ec1d0bc99dfd4efb7c00ed1e05ed1fc503a36ff89b9e82905?d=identicon)[vinicius73](/maintainers/vinicius73)

![](https://www.gravatar.com/avatar/799b2351104c65a512e9d428cce029e2e51cfa1ba10342ba50aba3bd5b71bf71?d=identicon)[hernandev](/maintainers/hernandev)

---

Top Contributors

[![vinicius73](https://avatars.githubusercontent.com/u/1561347?v=4)](https://github.com/vinicius73 "vinicius73 (31 commits)")[![andersao](https://avatars.githubusercontent.com/u/1131667?v=4)](https://github.com/andersao "andersao (13 commits)")[![vluzrmos](https://avatars.githubusercontent.com/u/450848?v=4)](https://github.com/vluzrmos "vluzrmos (2 commits)")[![lukzgois](https://avatars.githubusercontent.com/u/231633?v=4)](https://github.com/lukzgois "lukzgois (1 commits)")[![lguima](https://avatars.githubusercontent.com/u/1562097?v=4)](https://github.com/lguima "lguima (1 commits)")[![brunodevel](https://avatars.githubusercontent.com/u/4107556?v=4)](https://github.com/brunodevel "brunodevel (1 commits)")[![edbizarro](https://avatars.githubusercontent.com/u/84926?v=4)](https://github.com/edbizarro "edbizarro (1 commits)")

---

Tags

laravelphprepositorylaravelmodeleloquentlaravel5repositorywarehouse

### Embed Badge

![Health badge](/badges/artesaos-warehouse/health.svg)

```
[![Health](https://phpackages.com/badges/artesaos-warehouse/health.svg)](https://phpackages.com/packages/artesaos-warehouse)
```

###  Alternatives

[prettus/l5-repository

Laravel 8|9|10|11|12|13 - Repositories to the database layer

4.2k11.2M153](/packages/prettus-l5-repository)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.1M337](/packages/psalm-plugin-laravel)[yajra/laravel-oci8

Oracle DB driver for Laravel via OCI8

8723.1M23](/packages/yajra-laravel-oci8)[watson/validating

Eloquent model validating trait.

9733.4M53](/packages/watson-validating)[tucker-eric/eloquentfilter

An Eloquent way to filter Eloquent Models

1.8k5.0M31](/packages/tucker-eric-eloquentfilter)[reedware/laravel-relation-joins

Adds the ability to join on a relationship by name.

2121.2M16](/packages/reedware-laravel-relation-joins)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
