ra3oul / eloquent-abstract-repository
laravel eloquent abstract repository to implement repository pattern in easy way
This package is not auto-updated.
Last update: 2025-02-15 22:25:35 UTC
README
using repository pattern in laravel with a great base repository
Table of Contents
Installation
Composer
Execute the following command to get the latest version of the package:
composer require ra3oul/eloquent-abstract-repository -dev
Laravel
In your config/app.php
add
ra3oul\EloquentAbstractRepository\EloquentAbstractRepositoryServiceProvider::class
to the end of the providers
array:
'providers' => [ ... ra3oul\EloquentAbstractRepository\EloquentAbstractRepositoryServiceProvider::class, ],
Methods
ra3oul\EloquentAbstractRepository\repository\RepositoryInterface
- create($columns = array('*'))
- findOneById($id )
- findOneBy($key , $value )
- findManyBy($key,$value])
- findManyByIds($ids = array())
- findAll()
- findManyByCredentials($credentials = array())
- paginateBy($key, $value, $perPage = 10)
- paginate($perPage = 10)
- paginateByCredentials(array $credentials, $perPage = 10)
- updateOneById($id, array $data = [])
- updateOneBy($key, $value, array $data = [])
- updateOneByCredentials(array $credentials, array $data = []');
- updateManyBy($key, $value, array $data = []);
- updateManyByCredentials(array $credentials = [], array $data = []);
- updateManyByIds(array $ids, array $data = []);
- function deleteOneById($id);
- public function allExist(array $ids);
- deleteOneBy($key, $value);
- deleteOneByCredentials(array $credentials = []);
- deleteManyBy($key, $value);
- deleteManyByCredentials(array $credentials = []);
- deleteManyByIds(array $ids);
- searchByCredentials(array $credentials = [], $perPage);
- with(array $with = []);
- columns(array $columns = ['*']);
- limit($limit = 10);
- orderBy($orderBy, $sort = 'DESC');
Usage
Create a Model
Create your model normally, but it is important to define the attributes that can be filled from the input form data.
namespace App; class Article extends Eloquent { // can be any other class name protected $fillable = [ 'name', 'author', ... ]; ... }
Create a RepositoryInteface
namespace App; use Foo ; use ra3oul\EloquentAbstractRepository\repository\RepositoryInterface; interface ArticleRepositoryInterface extends RepositoryInterface { }
Create a Repository
namespace App; use Foo ; class ArticleRepository extends AbstractEloquentRepository implements ArticleRepositoryInterface public function __construct(Foo $model) { parent::__construct($model); } }
Create Service Provider
in order to bind interfaces to repository classes we should create a simple service provider to bind them
namespace App\Providers; use Illuminate\Support\ServiceProvider; class RepositoryServiceProvider extends ServiceProvider { protected function registeredRepositories() { // 'Repository Interface' => 'Implementation' return [ '\App\ArticleRepositoryInterface' => '\App\ArticleRepository', // you should add other interfaces and their implemented classes below ! ]; } /** * Register the service provider. * * @return void */ public function register() { $repos = $this->registeredRepositories(); foreach ($repos as $interface => $implemented) { $this->app->bind($interface, $implemented); } }
Use methods
namespace App\Http\Controllers; use App\ArticleRepositoryInterface; class ArticlesController extends BaseController { /** * @var ArticleRepository */ protected $repository; public function __construct(FooRepositoryInterface $repository){ $this->repository = $repository; } .... }
Find all results in Repository
$articles = $this->repository->findAll();
Find all results in Repository with pagination
$aritcles = $this->repository->columns([*])->paginate($limit=10);
Find by result by id
$articles = $this->repository->findOneById($id);
Showing only specific attributes of the model
$article = $this->repository->columns(['id', 'state_id'])->findOneById($id);
Loading the Model relationships
$article = $this->repository->with(['state'])->findOneById($id);
Find by result by field name
$articles = $this->repository->findOneBy('country_id','15');
Find by result by field
$articles = $this->repository->findManyBy('name','rasoul');
Find by result by multiple values in id
$articles = $this->repository->findManyByIds([1,2,3,4,5]);
Create new entry in Repository
$article = $this->repository->create( Input::all() );
Update entry in Repository
$article = $this->repository->updateOneById( $id , Input::all());
Delete entry in Repository
$this->repository->deleteOneById($id)