fomvasss/laravel-repository

This package is abandoned and no longer maintained. No replacement package was suggested.

The library for build laravel repository

1.2.1 2018-06-14 19:53 UTC

This package is auto-updated.

Last update: 2020-03-14 19:53:52 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

Base class and methods for build repository pattern in Laravel and cache queries

Installation

Run:

	composer require fomvasss/laravel-repository

Publish config:

php artisan vendor:publish --provider="Fomvasss\Repository\Providers\RepositoryServiceProvider" --tag="repository-config"

All base methods repository

Usage

Make own repository

Extend your repository class the next BaseRepository class

<?php

namespace App\Repositories;

use App\Models\Article;
use Fomvasss\Repository\Eloquent\BaseRepository;

class ArticleRepository extends BaseRepository
{
    public function model()
    {
        return Article::class;
    }
    //...
}

Use repository methods

<?php
namespace App\Http\Controllers;

use App\Repositories\ArticleRepository;

class ArticleController extends BaseController {

    protected $repository;

    public function __construct(ArticleRepository $repository) {
        $this->repository = $repository;
    }
    
    public function index() {
		$articles = $this->repository
			->scopes(['byStatus', 1], ['sortable', ['id'=>'desc']], 'searchable')
			->with('user')
			->where('created_at', \Carbon\Carbon::yesterday(), '>')
			->orderBy('created_at')
			->get();

        //....
    }
    
        public function show() {
    		$article = $this->repository
    			->scope('byStatus', 1)
    			->with(['user', 'categories'])
    			->where('created_at', \Carbon\Carbon::today(), '<')
    			->orderBy('created_at')
    			->firstOrFail();
    
            //....
        }
    //....
}

Make custom method in own repository

! Custom method do not use repository cache!

    public function myCustomMethodByType($attributes)
    {
        $this->applyExtras();
        $models = $this->query;

        if (!empty($attributes['type'])) {
            $models = $this->query->where('type', $attributes['type']);
        }

        $this->unsetClauses();
        return $models;
    }

Events repository

Repository entity have next events:

  • RepositoryEntityCreated
  • RepositoryEntityUpdated
  • RepositoryEntityDeleted

For example, you can add in your EventServiceProvider next:

protected $listen = [
	\Fomvasss\Repository\Events\RepositoryEntityCreated::class => [
		\App\Listeners\CreatedNewModelInRepoListener::class
	]
];

And use next method in method handle (in your listener CreatedNewModeInRepoListener):

public function handle(RepositoryEntityCreated $event)
{
	dd($event->getAction());
	dd($event->getModel());
	dd($event->getRepository());
}

Usage repository cache

All cache methods see in Interface CacheableInterface

Example repository with cache:

<?php

namespace App\Repositories;

use App\Models\Article;
use Fomvasss\Repository\Contracts\CacheableInterface;
use Fomvasss\Repository\Eloquent\BaseRepository;
use Fomvasss\Repository\Traits\CacheableRepository;

class ArticleRepository extends BaseRepository implements CacheableInterface
{
    use CacheableRepository;

	protected $cacheTime = 60;
	
    protected $cacheTimeForMethod = [
        'all' => 10,
        'get' => 10,
        'paginate' => 10,
        'find' => 1,
    ];
    
    protected $cacheOnly = ['all', 'get', 'find'];

    public function model()
    {
        return Article::class;
    }
}

Middleware for off cache

Example usage middleware in routes:

Add to App\Http\Kernel.php

protected $routeMiddleware = [
	//...
	'rpc-off' => \Fomvasss\Repository\Http\Middleware\RepositoryCacheOff::class,
];

and use in your routes:

Route::get('article', ArticleController@index)->middleware(['rpc-off']);

Change log

Please see CHANGELOG for more information what has changed recently.

License

The MIT License (MIT). Please see License File for more information.