Download the PHP package ratno/laravel-repositories without Composer
On this page you can find all versions of the php package ratno/laravel-repositories. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ratno/laravel-repositories
More information about ratno/laravel-repositories
Files in ratno/laravel-repositories
Package laravel-repositories
Short Description Laravel repositories using the native Eloquent functions
License MIT
Informations about the package laravel-repositories
Laravel Eloquent Repositories
Heads up! This is not yet another base class where there are some methods trying to act as Eloquent replacement. This is an implementation where you can use all Eloquent features on a custom class!
Using Repositories in Laravel can be a bit confusing. If you create custom classes functioning as repositories you can't really use Eloquent anymore, which is one of the best features of Laravel. That's why I was looking for another way for using the repository pattern in Laravel. I came up with this approach and thought I would share it.
Installation
Just install it through Composer:
After installation you can start using the repository pattern with Laravel.
Make a repository class
This package provide a new Artisan command to create a repository class. All the classes will be generated on the App\Repositories
folder, if this folder is missing, it will be generated automatically.
You can use the --model
option to define the Eloquent model that will be linked to this repository.
Don't forget to write the full namespace of your model, using '\\' as the separator.
Example
In this example I assume that you already have a model named Product. Used the command
php artisan make:repository ProductRepository --model=App\\Models\\Product
The magic appears with the Repository
trait, and the protected $model
property.
When you call an Eloquent method on your repository, this call will fallback to your model.
So all the Eloquent methods like where
, all
, find
, or your custom scopes are available in your repository.
The suggested way to initialize the $model
property is by using the IoC container.
This way you can always replace models for Mock objects when making unit tests.
I keep the following as a rule of thumb:
- When you're chaining more than 2 Eloquent methods, make a Repository method for it. This goes for all kind of methods, relationships, query scopes etc.
Making facade
In our previous example, we used the dependency injection to retrieve our repository.
If you want to use your repository without it like you are allowed to do it with a model, you need to create a Facade.
-
First, create your Facade, for example in
app/Facades/ProductRepository
: -
Then, in your
app/Providers/AppServiceProvider.php
, register your Facade : - Final step, add this alias to your
config/app.php
file :
Now, our routes/web.php
example would be like this :
Credits
Sjors van Dongen ([email protected])
Yannick Leone ([email protected])