josrom / eloquent-crud-repository
All the basic methods to any Laravel project with Repository pattern
Package info
github.com/JoseVte/eloquent-crud-repository
pkg:composer/josrom/eloquent-crud-repository
Requires
- php: ^8.3
- illuminate/database: ^13.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2026-04-24 11:50:51 UTC
README
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