PHPackages                             zebrainsteam/laravel-repos - 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. zebrainsteam/laravel-repos

ActivePackage

zebrainsteam/laravel-repos
==========================

Laravel adapter for the repository library

13[3 issues](https://github.com/zebrainsteam/laravel-repos/issues)PHPCI failing

Since Sep 8Pushed 4y ago4 watchersCompare

[ Source](https://github.com/zebrainsteam/laravel-repos)[ Packagist](https://packagist.org/packages/zebrainsteam/laravel-repos)[ RSS](/packages/zebrainsteam-laravel-repos/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependenciesVersions (2)Used By (0)

[![Scrutinizer Code Quality](https://camo.githubusercontent.com/9b771d75a2eab9b54d3379128b09922634cbee1a231c9ead17efcb2a22f17251/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7a65627261696e737465616d2f6c61726176656c2d7265706f732f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/zebrainsteam/laravel-repos/?branch=master)[![Code Intelligence Status](https://camo.githubusercontent.com/9270287e2c8db36e64dbbddc1c5566c2c37d7548510f5b8a8a25c23fc9e64510/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7a65627261696e737465616d2f6c61726176656c2d7265706f732f6261646765732f636f64652d696e74656c6c6967656e63652e7376673f623d6d6173746572)](https://scrutinizer-ci.com/code-intelligence)[![Code Coverage](https://camo.githubusercontent.com/68b8cef954dfa7514fbe92ac07e152293cd29d630964beeb13a928309f0773d1/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7a65627261696e737465616d2f6c61726176656c2d7265706f732f6261646765732f636f7665726167652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/zebrainsteam/laravel-repos/?branch=master)

Адаптер библиотеки [zebrainsteam/repos](https://github.com/zebrainsteam/repos) для Laravel
==========================================================================================

[](#адаптер-библиотеки-zebrainsteamrepos-для-laravel)

Дополняет библиотеку [zebrainsteam/repos](https://github.com/zebrainsteam/repos) рядом возможностей, предоставляемых инструментами Laravel. В частности:

1. предоставляет консольные команды для генерации интерфейсов, репозиториев и конфигурации;
2. адаптирует библиотеку для работы с Eloquent-моделями.

Установка
---------

[](#установка)

Добавление пакета в проект

```
composer require zebrainsteam/laravel-repos

```

Регистрация сервис-провайдера и фасада в `config/app.php`

```
'providers' => [

    ...

    /*
     * Application Service Providers...
     */
    ...
    \Zebrainsteam\LaravelRepos\LaravelReposServiceProvider::class,

],

'aliases' => [

    ...

    'RepositoryFactory' => Zebrainsteam\LaravelRepos\Facades\RepositoryFactory::class,

],

```

Публикация конфигурационного файла с помощью консольной команды

```
php artisan vendor:publish --provider="Zebrainsteam\LaravelRepos\LaravelReposServiceProvider"

```

Консольные команды для генерации интерфейсов и репозиториев
-----------------------------------------------------------

[](#консольные-команды-для-генерации-интерфейсов-и-репозиториев)

Создание интерфейса, наследуемого от базового интерфейса `Repositories\Core\Contracts\RepositoryInterface`:

```
php artisan make:repository-interface

```

Создание репозитория, наследуемого от абстрактного класса `Repositories\Core\AbstractRepository`:

```
php artisan make:repository

```

Создание репозитория ``, наследуемого от абстрактного класса `Repositories\Core\AbstractRepository`, и реализуемого им интерфейса с автоматической генерацией имени `Contract` (интерфейс будет расширять `Repositories\Core\Contracts\RepositoryInterface`):

```
php artisan make:repository  --with-interface

```

Та же операция, но с явным указанием имени интерфейса:

```
php artisan make:repository  --with-interface

```

Создание репозитория `` и реализуемого им интерфейса с автоматической генерацией имени `Contract` (интерфейс будет расширять `Repositories\Core\Contracts\RepositoryInterface`):

```
php artisan make:repository  --from-interface

```

Та же операция, но с явным указанием имени интерфейса:

```
php artisan make:repository  --from-interface

```

**Внимание!** При указании имени интерфейса/репозитория имеется возможность задать расположение/нэймспейс нового класса с помощью разделителя `/`. При этом действует следующее правило: если имя начинается с `/`, то нэймспейс формируется от корневого (`App\ `); иначе нэймспейс формируется от дефолтного (для репозитория - `App\Repositories\ `, для интерфейсов - `App\Contracts\Repository\ `).

Работа с Eloquent-моделями
--------------------------

[](#работа-с-eloquent-моделями)

В библиотеку добавлены репозиторий для работы с Eloquent-моделями `Zebrainsteam\LaravelRepos\EloquentRepository`, а также два резолвера для работы с ним: `Zebrainsteam\LaravelRepos\Resolvers\EloquentAwareResolver` и `Zebrainsteam\LaravelRepos\Resolvers\AutoResolver`.

#### EloquentRepository

[](#eloquentrepository)

унаследован от абстрактного класса `Repositories\Core\AbstractRepository` и содержит реализацию всех его методов посредством штатных инструментов фреймворка по работе с моделью.

#### EloquentAwareResolver

[](#eloquentawareresolver)

позволяет автоматически создавать репозиторий типа `EloquentRepository` для заданного класса модели, если последняя унаследована от `Illuminate\Database\Eloquent\Model`:

```
class User extends Illuminate\Database\Eloquent\Model
{
    ...
}

class Car extends Illuminate\Database\Eloquent\Model
{
    ...
}

$resolver = new Zebrainsteam\LaravelRepos\Resolvers\EloquentAwareResolver();

$userRepository = $resolver->resolve(User::class);
$firstUser = $userRepository->getById(1);

$carRepository = $resolver->resolve(Car::class);
$redCarExists = $carRepository->exists(['color' => 'red']);

```

#### AutoResolver

[](#autoresolver)

позволяет автоматически создавать репозиторий для заданного класса модели, если последняя содержит в себе конструктор репозитория (реализует интерфейс `Repositories\Core\Contracts\HasRepositoryInterface`) либо унаследована от `Illuminate/Database/Eloquent/Model`:

```
class User implements Repositories\Core\Contracts\HasRepositoryInterface
{
    ...

    public static function getRepository(): Repositories\Core\Contracts\RepositoryInterface;
    {
        return new UsersSuperRepository();
    }
}

class Car extends Illuminate\Database\Eloquent\Model
{
    ...
}

$resolver = new Zebrainsteam\LaravelRepos\Resolvers\AutoResolver();

$userRepository = $resolver->resolve(User::class); //создаст экземпляр UsersSuperRepository

$carRepository = $resolver->resolve(Car::class); //создаст экземпляр EloquentRepository

```

Работа с фабрикой репозиториев
------------------------------

[](#работа-с-фабрикой-репозиториев)

С репозиториями и резолверами можно работать отдельно, однако лучшим способом создания репозиториев является использование `Repositories\Core\RepositoryFactory`. Для этого должен быть опубликован конфигурационный файл `config/repositories.php` (см. инструкцию по установке пакета выше). В нем настраивается перечень резолверов и параметров, которые будут использованы при создании репозитория:

```
