All Projects → artesaos → Warehouse

artesaos / Warehouse

Licence: mit
Artesãos Warehouse - A simple and direct approach to repositories!

Projects that are alternatives of or similar to Warehouse

Config
Manage Laravel configuration by persistent storage
Stars: ✭ 139 (+59.77%)
Mutual labels:  laravel, repository
Repository
🖖Repository Pattern in Laravel. The package allows to filter by request out-of-the-box, as well as to integrate customized criteria and any kind of filters.
Stars: ✭ 134 (+54.02%)
Mutual labels:  laravel, repository
Laravel Repository
Repository Design Pattern for Laravel 5 with Eloquent or Collection
Stars: ✭ 109 (+25.29%)
Mutual labels:  laravel, repository
Laravel Repositories
[ABANDONED] Rinvex Repository is a simple, intuitive, and smart implementation of Active Repository with extremely flexible & granular caching system for Laravel, used to abstract the data layer, making applications more flexible to maintain.
Stars: ✭ 664 (+663.22%)
Mutual labels:  laravel, repository
Laravel 5 Myblog
The php blog writed by laravel5.1
Stars: ✭ 86 (-1.15%)
Mutual labels:  laravel
Bigbluebutton
Package that provides easily communicate between bigbluebutton server and laravel framework
Stars: ✭ 85 (-2.3%)
Mutual labels:  laravel
Laravel Schedule List
Laravel package to add command to list all scheduled artisan commands
Stars: ✭ 84 (-3.45%)
Mutual labels:  laravel
Embedding Reference Apps
Reference applications for common web frameworks showing how to embed Metabase charts
Stars: ✭ 83 (-4.6%)
Mutual labels:  laravel
Background Template For Laravel5
专门为Laravel5整理的后台模板,只写了路由的页面跳转,给开发者最大的空间自己开发.
Stars: ✭ 87 (+0%)
Mutual labels:  laravel
Dompet
A personal bookkeeping web application, built with Laravel 5.
Stars: ✭ 87 (+0%)
Mutual labels:  laravel
Dingtalk Exception
Laravel/Lumen exception notify through DingTalk
Stars: ✭ 86 (-1.15%)
Mutual labels:  laravel
Circleci Demo Php Laravel
Example CircleCI project using PHP and Laravel
Stars: ✭ 85 (-2.3%)
Mutual labels:  laravel
Laravel Spark Google2fa
Google Authenticator support for Laravel Spark
Stars: ✭ 86 (-1.15%)
Mutual labels:  laravel
Weixin
[READ ONLY] Subtree split of the SocialiteProviders/Weixin Provider (see SocialiteProviders/Providers)
Stars: ✭ 84 (-3.45%)
Mutual labels:  laravel
Gittar
🎸 Download and/or Extract git repositories (GitHub, GitLab, BitBucket). Cross-platform and Offline-first!
Stars: ✭ 87 (+0%)
Mutual labels:  repository
Laravel Vue Generators
Generate Vue js files via artisan commands
Stars: ✭ 84 (-3.45%)
Mutual labels:  laravel
Tall Dashboard
Tailwind CSS + AlpineJS + Laravel + Livewire dashboard (WIP)
Stars: ✭ 83 (-4.6%)
Mutual labels:  laravel
Laravel Woocommerce
WooCommerce Rest API for Laravel
Stars: ✭ 86 (-1.15%)
Mutual labels:  laravel
Docker Laravel
Laravel 5 with Dockerized Gulp, PHP-FPM, MySQL and nginx using docker-compose
Stars: ✭ 85 (-2.3%)
Mutual labels:  laravel
Rating
rating system for laravel 5
Stars: ✭ 85 (-2.3%)
Mutual labels:  laravel

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

Total Downloads Latest Stable Version Latest Unstable Version License

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 ?

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

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

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

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();
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].