composer require miladimos/laravel-repository
php artisan repository:install
php artisan make:repository {ModelName}
php artisan make:repository Tag
this create a TagRepository and TagEloquentRepositoryInterface
next you must add Repository to RepositoryServiceProvider in repositories property like:
protected $repositories = [ [ TagEloquentRepositoryInterface::class, TagRepository::class, ], ];
next in your controller add this:
private $tagRepo; public function __construct(TagEloquentRepositoryInterface $tagRepo) { $this->tagRepo = $tagRepo; }
add custom methods in TagEloquentRepositoryInterface and implement them.
you must have a provider with below content and register it:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class RepositoryServiceProvider extends ServiceProvider { /** * define your repositories here */ protected $repositories = [ [ ModelEloquentRepositoryInterface::class, ModelRepository::class ], ]; public function register() { foreach ($this->repositories as $repository) { $this->app->bind($repository[0], $repository[1]); } } }
or create it automatically by below command:
php artisan make:repository:provider
and add to app.php providers:
App\Providers\RepositoryServiceProvider::class,
$model->all($columns = ['*']); $model->create(array $data); $model->update(array $data, $id, $attribute = "id"); $model->find($id); $model->findOrFail($id); $model->findWhere(string $field, $condition, $columns); $model->first(); $model->last(); $model->firstOrCreate(); $model->whereIn($attribute, array $values); $model->max($column); $model->min($column); $model->avg($column); $model->delete($id); $model->truncate(); $model->count($columns = ['*']); $model->paginate($columns = ['*'], $perPage = 8); $model->simplePaginate($limit = null, $columns = ['*']); $model->search(array $query, $columns = ["*"]); $model->pluck($value, $key = null); $model->with($relations); $model->toSql();