framework for building repository pattern in Laravel.
requires Laravel 6.0
$ composer require shintarosakata/laravel-repository
$ artisan make:repository <name>
$ artisan make:interface <name>
$ artisan make:entity <name>
$ artisan make:repositoryProvider <name>
RepositoryProvider is for binding repository and interface
Entity name -> singular
Other -> plural
$ artisan make:entity Sample
entity created successfully.
$ artisan make:repository Samples
repository created successfully.
$ artisan make:interface Samples
repository created successfully.
$ artisan make:repositoryProvider RepositoryProvider
Provider created successfully.
↓
.
└── app
├── Entities
│ └── Sample.php
│
├── Repositories
│ ├── Samples.php
│ └── SamplesInterface.php
│
└── Providers
└── RepositoryProvider
<?php
namespace App\Providers;
use shintarosakata\LaravelRepository\RepositoryProvider\RepositoryProvider as upstreamRepositoryProvider;
class RepositoryProvider extends upstreamRepositoryProvider
{
// ...
protected $repositories = [
'Samples', // Add <name> here
];
// ...
./config/app.php
<?php
return [
// ...
'providers' => [
// ...
App\Providers\RepositoryProvider::class, // register provider
],
// ...
];
<?php
namespace App\Repositories\Samples;
use shintarosakata\LaravelRepository\Repository\Repository;
use Illuminate\Database\Eloquent\Collection;
use App\Entities\Sample;
class Samples extends Repository implements SamplesInterface
{
protected $table = 'samples'; // Add DB Table name here
public function fetchFirst(): Sample
{
return $this->builder->first();
}
public function fetchAll(): Collection
{
return $this->builder->get();
}
}
<?php
namespace App\Repositories\Samples;
use shintarosakata\LaravelRepository\Repository\RepositoryInterface;
use Illuminate\Database\Eloquent\Collection;
use App\Entities\Sample;
interface SamplesInterface extends RepositoryInterface
{
// Add public functions here...
public function fetchFirst(): Sample;
public function fetchAll(): Collection;
}
<?php
namespace App\Entities;
use shintarosakata\LaravelRepository\Entity\Entity as upstreamEntity;
class Sample extends upstreamEntity
{
// Add behavior here...
}
<?php
namespace App\Http\Controllers;
use App\Repositories\Samples\SamplesInterface;
class SampleController extends Controller
{
private $samples_repository;
// Dependency injection
public function __construct(SamplesInterface $samples_repository) {
$this->samples_repository = $samples_repository;
}
public function index()
{
$first_sample_entity = $this->samples_repository->fetchFirst();
return view('sample.index', $first_sample_entity);
}
}
Thank you for considering contributing to the Laravel-Repository
please send an e-mail to Shintaro Sakata [email protected].
If you discover a security vulnerability within Laravel-Repository, please send an e-mail to Shintaro Sakata [email protected]. All security vulnerabilities will be promptly addressed.
Laravel-Repository is open-source software licensed under the MIT license.