A simple package to create a make:repository command for Laravel 10, 11, and 12.
jason-guru/laravel-make-repository is a Laravel package for a simple package to create a make:repository command for laravel 10, 11, and 12..
It currently has 62 GitHub stars and 315.142 downloads on Packagist (latest version v1.0.0).
Install it with composer require jason-guru/laravel-make-repository.
Discover more Laravel packages by jason-guru
or browse all Laravel packages to compare alternatives.
Last updated
A simple package that adds a php artisan make:repository command to Laravel 10, 11, 12, and 13.
Require the package with composer:
composer require jason-guru/laravel-make-repository --dev
Or add it to your composer.json require-dev section and run composer update:
"require-dev": {
"jason-guru/laravel-make-repository": "^1.0"
}
php artisan make:repository your-repository-name
Example:
php artisan make:repository UserRepository
Or with a sub-namespace:
php artisan make:repository Backend\\UserRepository
Wire up a model in one shot with the --model (-m) option — the generated repository imports the model and returns it from model():
php artisan make:repository UserRepository --model=User
The above commands create a Repositories directory inside the app directory.
By default, make:repository UserRepository creates two files:
app/Repositories/UserRepository.php — the concrete classapp/Repositories/Contracts/UserRepositoryInterface.php — the paired interface (extends RepositoryContract)The concrete is declared implements UserRepositoryInterface, and the package's service provider auto-binds the interface to the concrete in the container — so you can type-hint the interface anywhere:
public function __construct(private UserRepositoryInterface $users) {}
To skip the interface for a single command, pass --no-interface:
php artisan make:repository UserRepository --no-interface
Publish the config to customize behavior:
php artisan vendor:publish --tag=repository-config
That creates config/repository.php:
return [
'path' => 'app/Repositories',
'namespace' => 'App\\Repositories',
'with_interface' => true, // generate a paired interface
'bind' => true, // auto-bind interface => concrete
];
A repository generated with --model=User looks like this:
<?php
namespace App\Repositories;
use App\Models\User;
use App\Repositories\Contracts\UserRepositoryInterface;
use JasonGuru\LaravelMakeRepository\Repository\BaseRepository;
class UserRepository extends BaseRepository implements UserRepositoryInterface
{
public function model(): string
{
return User::class;
}
}