LaravelPackages.net
Acme Inc.
Toggle sidebar
josrom/eloquent-crud-repository

All the basic methods to any Laravel project with Repository pattern

2.365
0
13.0.0
About josrom/eloquent-crud-repository

josrom/eloquent-crud-repository is a Laravel package for all the basic methods to any laravel project with repository pattern. It currently has 0 GitHub stars and 2.365 downloads on Packagist (latest version 13.0.0). Install it with composer require josrom/eloquent-crud-repository. Discover more Laravel packages by josrom or browse all Laravel packages to compare alternatives.

Last updated

Eloquent CRUD Repository

CircleCI Latest Stable Version Total Downloads License

Introduction

EloquentCrudRepository provides a well tested and complete base to create more model repositories using the repository pattern with Eloquent as ORM.

Public methods available

|Name|Parameters|Return| |----|----------|------| |all|array $with = []|\Illuminate\Database\Eloquent\Collection| |allWithTrashed|array $with = []|\Illuminate\Database\Eloquent\Collection| |allTrashed|array $with = []|\Illuminate\Database\Eloquent\Collection| |find|int $id, array $with = []|\Illuminate\Database\Eloquent\Model| |findWithTrashed|int $id, array $with = []|\Illuminate\Database\Eloquent\Model| |findTrashed|int $id, array $with = []|\Illuminate\Database\Eloquent\Model| |findBy|string $field, mixed $value, string $comparison = '=', bool $strict = true, array $with = []|\Illuminate\Database\Eloquent\Model| |findByWithTrashed|string $field, mixed $value, string $comparison = '=', bool $strict = true, array $with = []|\Illuminate\Database\Eloquent\Model| |findByTrashed|string $field, mixed $value, string $comparison = '=', bool $strict = true, array $with = []|\Illuminate\Database\Eloquent\Model| |newModel|array $params = []|\Illuminate\Database\Eloquent\Model| |create|array $params|\Illuminate\Database\Eloquent\Model| |update|int $id, array $params|\Illuminate\Database\Eloquent\Model| |delete|int $id|bool| |forceDelete|int $id|bool| |restore|int $id|bool| |paginate|\Illuminate\Database\Eloquent\Builder $query, int $page = 0, int $limit = 15|object| |paginateCollection|\Illuminate\Database\Eloquent\Collection $collection, int $page = 0, int $limit = 15|object| |pagination|int $page = 0, int $limit = 15|object| |paginationWithTrashed|int $page = 0, int $limit = 15|object| |paginationOnlyTrashed|int $page = 0, int $limit = 15|object|

Protected methods available

|Name|Parameters|Return| |----|----------|------| |checkCanShow|?\Illuminate\Database\Eloquent\Model $model|void| |checkCanCreate|array $params|void| |checkCanUpdate|\Illuminate\Database\Eloquent\Model $model, array $newValues|void| |checkCanDelete|\Illuminate\Database\Eloquent\Model $model|void| |checkCanRestore|\Illuminate\Database\Eloquent\Model $model|void| |canShow|?\Illuminate\Database\Eloquent\Model $model|bool| |canCreate|array $params|bool| |canUpdate|\Illuminate\Database\Eloquent\Model $model, array $newValues|bool| |canDelete|\Illuminate\Database\Eloquent\Model $model|bool| |canRestore|\Illuminate\Database\Eloquent\Model $model|bool| |hasSoftDeletes| |bool|

Usage

Basic repository

Extend CrudRepository and inject your Eloquent model. Annotate with @extends CrudRepository<YourModel> so that IDEs and static analysis tools (PHPStan, Psalm) can infer the concrete model type on every return value:

use Eloquent\Crud\Repository\Eloquent\CrudRepository;

/**
 * @extends CrudRepository<User>
 */
class UserRepository extends CrudRepository
{
    public function __construct()
    {
        parent::__construct(new User());
    }
}

With that annotation in place, find(), create(), update(), all(), etc. all resolve to User (or Collection<int, User>) in your IDE instead of the base Model.

Access control

Override any can* method to restrict access. The corresponding checkCan* guard calls it and throws AccessDeniedException (HTTP 403) on denial:

/**
 * @extends CrudRepository<Post>
 */
class PostRepository extends CrudRepository
{
    public function __construct()
    {
        parent::__construct(new Post());
    }

    protected function canUpdate(Model $model, array $newValues): bool
    {
        return Auth::id() === $model->user_id;
    }

    protected function canDelete(Model $model): bool
    {
        return Auth::user()->isAdmin();
    }
}

SoftDeletes

If your model uses the SoftDeletes trait, the WithTrashed and OnlyTrashed variants are automatically available:

/**
 * @extends CrudRepository<Post>
 */
class PostRepository extends CrudRepository
{
    public function __construct()
    {
        parent::__construct(new Post()); // Post uses SoftDeletes
    }
}

$repo->allWithTrashed();          // active + soft-deleted
$repo->allTrashed();              // only soft-deleted
$repo->findWithTrashed($id);
$repo->findTrashed($id);
$repo->forceDelete($id);
$repo->restore($id);

Installation

To get the last version of EloquentCrudRepository, simply require the project using Composer:

composer require josrom/eloquent-crud-repository

Instead, you may of course manually update your require block and run composer update if you so choose:

{
    "require": {
        "josrom/eloquent-crud-repository": "^13.0"
    }
}

License

EloquentCrudRepository is open-sourced software licensed under the MIT license

Star History Chart