jason-guru/laravel-make-repository

A simple package to create a make:repository command for Laravel 10, 11, and 12.

Maintainers

Package info

github.com/jason-guru/laravel-make-repository

pkg:composer/jason-guru/laravel-make-repository

Statistics

Installs: 313 137

Dependents: 0

Suggesters: 0

Stars: 62

Open Issues: 3

v1.0.0 2026-06-01 11:04 UTC

This package is auto-updated.

Last update: 2026-06-01 11:07:13 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

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 class
  • app/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

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;
    }
}