herojhc / laravel-repository
Laravel Repository
Installs: 365
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/herojhc/laravel-repository
Requires
- php: >=7.1
 - illuminate/config: ~5.5|~6.0|~7.0
 - illuminate/console: ~5.5|~6.0|~7.0
 - illuminate/database: ~5.5|~6.0|~7.0
 - illuminate/filesystem: ~5.5|~6.0|~7.0
 - illuminate/http: ~5.5|~6.0|~7.0
 - illuminate/support: ~5.5|~6.0|~7.0
 
Requires (Dev)
- mockery/mockery: dev-master@dev
 - phpunit/phpunit: ^5.7|^7.0
 
README
- l5-repository simple
 
Installation
Composer
Execute the following command to get the latest version of the package:
composer require herojhc/laravel-repository
Laravel
>= laravel5.5
ServiceProvider will be attached automatically
Other
In your config/app.php add Herojhc\Repositories\Providers\RepositoryServiceProvider::class to the end of the providers array:
'providers' => [ ... Herojhc\Repositories\Providers\RepositoryServiceProvider::class, ],
If Lumen
$app->register(Herojhc\Repositories\Providers\LumenRepositoryServiceProvider::class);
Publish Configuration
php artisan vendor:publish --provider "Herojhc\Repositories\Providers\RepositoryServiceProvider"
Methods
Herojhc\Repositories\Contracts\RepositoryInterface
- all($columns = array('*'))
 - first($columns = array('*'))
 - paginate($limit = null, $columns = ['*'])
 - find($id, $columns = ['*'])
 - findBy($field, $value, $columns = ['*'])
 - findWhere(array $where, $columns = ['*'])
 - findWhereIn($field, array $where, $columns = [*])
 - findWhereNotIn($field, array $where, $columns = [*])
 - create(array $attributes)
 - update(array $attributes, $id)
 - updateOrCreate(array $attributes, array $values = [])
 - delete($id)
 - deleteWhere(array $where)
 - orderBy($column, $direction = 'asc');
 - with(array $relations);
 - has(string $relation);
 - whereHas(string $relation, closure $closure);
 - hidden(array $fields);
 - visible(array $fields);
 - scopeQuery(Closure $scope);
 - getFieldsSearchable();
 
Herojhc\Repositories\Contracts\CriteriaInterface
- pushCriteria($criteria)
 - popCriteria($criteria)
 - getCriteria()
 - getByCriteria(CriteriaInterface $criteria)
 - skipCriteria($status = true)
 - getFieldsSearchable()
 
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 Post extends Eloquent { // or Ardent, Or any other Model Class protected $fillable = [ 'title', 'author', ... ]; ... }
Create a Repository
namespace App; use Herojhc\Repositories\Eloquent\BaseRepository; class PostRepository extends BaseRepository { /** * Specify Model class name * * @return string */ function model() { return "App\\Post"; } }
Create a Criteria
Using the command
php artisan make:criteria My
Criteria are a way to change the repository of the query by applying specific conditions according to your needs. You can add multiple Criteria in your repository.
use Herojhc\Repositories\Contracts\RepositoryInterface; use Herojhc\Repositories\Criteria\Criteria; class MyCriteria extend Criteria { public function apply($model, RepositoryInterface $repository) { $model = $model->where('user_id','=', Auth::user()->id ); return $model; } }
Using the Criteria in a Controller
namespace App\Http\Controllers; use App\PostRepository; class PostsController extends BaseController { /** * @var PostRepository */ protected $repository; public function __construct(PostRepository $repository){ $this->repository = $repository; } public function index() { $this->repository->pushCriteria(new MyCriteria1()); $this->repository->pushCriteria(MyCriteria2::class); $posts = $this->repository->all(); ... } }