josrom/eloquent-crud-repository

All the basic methods to any Laravel project with Repository pattern

Maintainers

Package info

github.com/JoseVte/eloquent-crud-repository

pkg:composer/josrom/eloquent-crud-repository

Statistics

Installs: 2 365

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

13.0.0 2026-04-24 11:50 UTC

README

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