jason-guru/laravel-make-repository
| Install | |
|---|---|
composer require jason-guru/laravel-make-repository |
|
| Latest Version: | v1.0.0 |
| PHP: | ^8.1 |
| License: | MIT |
| Last Updated: | Jun 1, 2026 |
| Links: | GitHub · Packagist |
Laravel PHP Artisan Make:Repository
A simple package that adds a php artisan make:repository command to Laravel 10, 11, 12, and 13.
Installation
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"
}
Usage
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.
Generated files
By default, make:repository UserRepository creates two files:
app/Repositories/UserRepository.php— the concrete classapp/Repositories/Contracts/UserRepositoryInterface.php— the paired interface (extendsRepositoryContract)
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
Configuration
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
];
Example output
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;
}
}