jason-guru / laravel-make-repository
A simple package to create a make:repository command for Laravel 10, 11, and 12.
Package info
github.com/jason-guru/laravel-make-repository
pkg:composer/jason-guru/laravel-make-repository
Requires
- php: ^8.1
- illuminate/console: ^10.0 || ^11.0 || ^12.0 || ^13.0
- illuminate/database: ^10.0 || ^11.0 || ^12.0 || ^13.0
- illuminate/support: ^10.0 || ^11.0 || ^12.0 || ^13.0
Requires (Dev)
- orchestra/testbench: ^8.0 || ^9.0 || ^10.0 || ^11.0
- phpunit/phpunit: ^10.5 || ^11.0 || ^12.0
This package is auto-updated.
Last update: 2026-06-01 11:07:13 UTC
README
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; } }