Download the PHP package maarsson/laravel-repository without Composer
On this page you can find all versions of the php package maarsson/laravel-repository. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download maarsson/laravel-repository
More information about maarsson/laravel-repository
Files in maarsson/laravel-repository
Package laravel-repository
Short Description Complete repository pattern for Laravel 8
License MIT
Informations about the package laravel-repository
Laravel model repository pattern
This package adds and extendable repository pattern to your Laravel project.
Though using repository pattern over Eloquent models may be an outworn idea, you can make your Laravel project code clean with a bunch of built-in functions of this package.
Installation
- Add package to your Laravel project:
composer require maarsson/laravel-repository
- Publish config file
php artisan vendor:publish --tag=repository-config
Usage
-
Create repository to your existing Eloquent model:
php artisan make:repository 'YourModel'
. -
Add your model name to the
config/repository.php
: -
Use dependency injection in your code:
-
Optionally you can add custom methods to the repository:
and also to the interface class:
Methods
Retrieving entities
Retrieving all entities from the database
Retrieving entity by ID
Retrieving entities by a specific column
Retrieving the first or last entity (by its timestamp)
You can also specify which columns to be fetched
Retrieving the number of entities
Creating an entity
Updating an entity
Updating an entity by ID
Deleting an entity
Deleting an entity by ID
Mass-deleting entities by where closure
Paginating
Laravels paginating can be applied on queries, even combinated with other queries.
Getters: custom filtering and sorting
Entities can be easily filtered or sorted using getter classes. Filter keys and sorter methods in the request without matching function in the getter class will be ignored.
-
Create getter class to your existing repository:
php artisan make:getter 'YourModel'
. -
Add the
Maarsson\Repository\Traits\GetterableTrait
trait to the model repository: -
Add the required filtering method(s) to the created
YourModelGetter
class. Filter method names must be camel cased and must end withFilter
: -
Get the filtered collection using the
filter[]
parameter in the query -
Add the required sorting method(s) to the created
YourModelGetter
class. Sorter method names must be camel cased and must end withSorter
: - Get the sorted collection using the
sort_by
parameter in the query
Simplified filtering, sorting and paginating
Get the filtered, sorted and paginated result by the helper methods.
The following request parameters are considered:
filter[]
default:null
page
default:1
per_page
default:20
sort_by
default:'id'
sort_order
default:'asc'
Attribute (and relation) filter
Using the attribute filter trait you can control the model attributes to be fetched, including the relations (and its attributes).
-
Add the
Maarsson\Repository\Traits\EloquentAttributeFilterTrait
trait to the Eloquent model: - Get full control of the appended attributes and relations using a simple dot-notated array passed to the
withAttributes()
method. In this example you can also see how to combine this with the pagination.
Using Eloquent Builder methods
Certain builder methods are available directly. Note using of the getter method at the end of the query.
Sophisticated where queries:
Ordering result:
Working with soft-deleted entities:
Working with relations:
Reaching native Eloquent builder:
Events
Events fired automatically in certain cases:
Create events
- Before an entity is beeing created, the
\App\Events\YourModelIsCreatingEvent::class
is fired:- where the
$event->attributes
property contains the creating data array.
- where the
- After an entity was created, the
\App\Events\YourModelWasCreatedEvent::class
is fired:- where the
$event->model
property contains the created entity, - and the
$event->attributes
property contains the creating data array.
- where the
Update events
- Before an entity is beeing updated, the
\App\Events\YourModelIsUpdatingEvent::class
is fired:- where the
$event->model
property contains the original entity, - and the
$event->attributes
property contains the updating data array.
- where the
- After an entity was updated, the
\App\Events\YourModelWasUpdatedEvent::class
is fired:- where the
$event->model
property contains the updated entity, - and the
$event->attributes
property contains the updating data array.
- where the
Delete events
- Before an entity is beeing deleted, the
\App\Events\YourModelIsDeletingEvent::class
is fired:- where the
$event->model
property contains the original entity.
- where the
- After an entity was deleted, the
\App\Events\YourModelWasDeletedEvent::class
is fired:- where the
$event->model
property contains the already deleted entity.
- where the
Listeners
Event listeners automatically sets up for the events with the same naming conventions:
YourModelIsCreatingListener
listens theYourModelIsCreatingEvent
YourModelWasCreatedListener
listens theYourModelWasCreatedEvent
...and so on.
If a listeners handle()
method of a before-event returns false
it will prohibit the given action.
License
This package is open-sourced software licensed under the MIT license.