2017 © Pedro Peláez
 

library laravel-repositories

Saritasa repository pattern implementation for Laravel

image

saritasa/laravel-repositories

Saritasa repository pattern implementation for Laravel

  • Wednesday, August 1, 2018
  • by saritasa
  • Repository
  • 2 Watchers
  • 0 Stars
  • 1,645 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 26 Versions
  • 24 % Grown

The README.md

Laravel Repositories

PHP Unit PHP CodeSniffer CodeCov Release PHPv Downloads, (*1)

Implementation of Repository pattern for Laravel (on top of Eloquent), (*2)

Laravel 5.5+

Install the saritasa/laravel-repositories package:, (*3)

$ composer require saritasa/laravel-repositories  

Configuration

  • Publish configuration file:
php artisan vendor:publish --tag=laravel_repositories
  • Register custom repositories implementation:
return [
    'bindings' => [
        \App\Models\User::class => \App\Repositories\UserRepository::class,
    ],
];

Note: Your custom repository must implement IRepository contract., (*4)

Getting repository inside your code

To get specific repository in your code you can just build with DI container repositories factory and then build needed for your repository in this factory.
Example:, (*5)

    $repositoryFactory = app(\Saritasa\LaravelRepositories\Repositories\IRepositoryFactory::class);
    $userRepository = $repositoryFactory->getRepository(\App\Models\User::class);

Filtering results with repository

Methods findWhere/getWhere/getWith/getPage/getCursorPage/count/ can receive criteria as params Here the examples of available syntax: - Criterion without operator:, (*6)

    $criteria = [
        'field1' => 'value1',
        'field2' => 1,
    ];

In this case = operator and and boolean between them will be used.
Example: ... 'field1 = 'value1' and 'field2' = 1 ... - Criterion with operator:, (*7)

    $criteria = [
        ['field1', '<>', 'value1'],
        ['field2', '>', 1, 'or'],
        ['field3', 'in', [1, 2]],
        ['field4', 'not in', new \Illuminate\Support\Collection([1, 2])],
    ];

Important: arrays and collection can be used only with in and not in operators.
Note: As 4th parameter you can pass boolean or/and (and uses by default). But you should remember that boolean used between current and previous criterion
Example: ... 'field1 <> 'value1' or 'field2' > 1 and 'field3' in (1, 2) and 'field4' not in (1, 2) ...
- Criterion as DTO:, (*8)

    $criteria = [
            new Criterion([
                Criterion::OPERATOR => '<>',
                Criterion::VALUE => 'value1',
                Criterion::ATTRIBUTE => 'field1',
            ]),
            new Criterion([
                Criterion::OPERATOR => '>',
                Criterion::VALUE => 1,
                Criterion::ATTRIBUTE => 'field2',
                Criterion::BOOLEAN => 'or',
            ]),
            new Criterion([
                Criterion::OPERATOR => 'in',
                Criterion::VALUE => [1, 2],
                Criterion::ATTRIBUTE => 'field3',
            ]),   
            new Criterion([
                Criterion::OPERATOR => 'not in',
                Criterion::VALUE => [1, 2],
                Criterion::ATTRIBUTE => 'field4',
            ]),                     
    ];

Result will be the same as in previous example. - Nested criteria:
You can group different conditions that gives flexibility in getting data from repository, (*9)

    $criteria = [
        [
            ['field1', '<>', 'value1'],
            ['field2', '>', 1, 'or'],
        ],
        [
            ['field3', 'in', [1, 2]],
            ['field4', 'not in', [1, 2],
            'boolean' => 'or',
        ],
    ];

Note: you can add nesting level in any depth what you want. To use or condition between one group and other(group and non-group condition) you can pass 'boolean' parameter in the same level as other conditions., (*10)

Example:... ('field1 <> 'value1' or 'field2' > 1) or ('field3' in (1, 2) and 'field4' not in (1, 2)) ...
- Relation existence criterion:
You can build queries to check on existence any model relations, (*11)

    $criteria = [
        new RelationCriterion('roles', [['slug', 'in', [1, 2]]], 'or'), 
    ];

Preload model relations

Method getWith() method allows to retrieve list of entities with
eager loaded related models and related models counts. Also allows to filter this list by given criteria
and sort in requested order., (*12)

Example:, (*13)

$usersRepository->getWith(
    ['role', 'supervisors'],
    ['phones'],
    [],
    new Saritasa\LaravelRepositories\DTO\SortOptions('name', 'DESC')
);
  • Each user will be retrieved with pre-loaded role and supervisors models.
  • Each user will be retrieved with pre-loaded phones relation count.
  • List of users will be ordered by requested sort options.

Exceptions

Repository Exception

Base exception for repository layer., (*14)

Repository register exception

Throws when can not register custom repository., (*15)

Model not found Exception

Throws in case when some model not exists in storage., (*16)

Bad Criteria Exception

Throws when provided criteria has incorrect format at least in one criterion inside., (*17)

Contributing

  1. Create fork, checkout it
  2. Develop locally as usual. Code must follow PSR-1, PSR-2 -
    run PHP_CodeSniffer to ensure, that code follows style guides
  3. Cover added functionality with unit tests and run PHPUnit to make sure, that all tests pass
  4. Update README.md to describe new or changed functionality
  5. Add changes description to CHANGES.md file. Use Semantic Versioning convention to determine next version number.
  6. When ready, create pull request

Make shortcuts

If you have GNU Make installed, you can use following shortcuts:, (*18)

  • make cs (instead of php vendor/bin/phpcs) -
    run static code analysis with PHP_CodeSniffer
    to check code style
  • make csfix (instead of php vendor/bin/phpcbf) -
    fix code style violations with PHP_CodeSniffer
    automatically, where possible (ex. PSR-2 code formatting violations)
  • make test (instead of php vendor/bin/phpunit) -
    run tests with PHPUnit
  • make install - instead of composer install
  • make all or just make without parameters -
    invokes described above install, cs, test tasks sequentially -
    project will be assembled, checked with linter and tested with one single command

Resources

The Versions

01/08 2018

dev-master

9999999-dev

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

01/08 2018

3.1.0

3.1.0.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

25/05 2018

3.0.0

3.0.0.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

13/03 2018

2.x-dev

2.9999999.9999999.9999999-dev

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

13/03 2018

2.1.1

2.1.1.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

13/03 2018

dev-release/2.1

dev-release/2.1

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

13/02 2018

2.1.0

2.1.0.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

13/02 2018

2.0.1

2.0.1.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

13/02 2018

2.0.0

2.0.0.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

30/01 2018

1.0.16

1.0.16.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

19/01 2018

1.0.15

1.0.15.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

31/08 2017

1.0.14

1.0.14.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

04/07 2017

1.0.13

1.0.13.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

17/06 2017

1.0.12

1.0.12.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

17/06 2017

1.0.11

1.0.11.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

16/06 2017

1.0.10

1.0.10.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

16/06 2017

1.0.9

1.0.9.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

15/06 2017

1.0.8

1.0.8.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

09/06 2017

1.0.7

1.0.7.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

07/06 2017

1.0.6

1.0.6.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

07/06 2017

1.0.5

1.0.5.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

06/06 2017

1.0.4

1.0.4.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

05/06 2017

1.0.3

1.0.3.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

02/06 2017

1.0.2

1.0.2.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

02/06 2017

1.0.1

1.0.1.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository

08/04 2017

1.0.0

1.0.0.0

Saritasa repository pattern implementation for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sergey Populov

database laravel repository