arafat69/laravel-repository

Laravel Repository Pattern package with built-in Artisan commands. Easily create repositories, follow clean architecture, and simplify database interactions.

Installs: 2 367

Dependents: 0

Suggesters: 0

Security: 0

Stars: 5

Watchers: 1

Forks: 0

Open Issues: 0

pkg:composer/arafat69/laravel-repository

v2.0.0 2025-09-22 19:54 UTC

This package is auto-updated.

Last update: 2025-11-22 20:18:49 UTC


README

Packagist Stars GitHub issues Total Downloads Latest Stable Version License

Laravel Repository

A simple, lightweight, and powerful Laravel repository pattern package with built-in Artisan commands for generating repositories quickly.
Supports Laravel 7 and above.

Features

  • Generate repositories using Artisan commands
  • Supports model-specific repositories
  • Clean, maintainable code following repository pattern
  • Easy CRUD operations in repositories
  • Supports all Laravel versions from 7+
  • Optional stubs publishing for customization

Installation

composer require arafat69/laravel-repository

After installing, a repository.php file will be created in your Repositories folder.

Generating a Repository

php artisan make:repository UserRepository

With a model: // use scope for specific model

php artisan make:repository UserRepository --model=User

Defining Functions in Repository

// Create a new record
public static function storeByRequest($request): User
{
    return self::create([
        'first_name' => $request->first_name,
        'last_name' => $request->last_name,
        'email' => $request->email,
        'phone' => $request->phone,
        //...
    ]);
}

// Update existing record
public static function updateByRequest($request, User $user): User
{
    $user->update([
        'first_name' => $request->first_name,
        'last_name' => $request->last_name,
        'email' => $request->email,
        'phone' => $request->phone,
        //...
    ]);

    return $user;
}

Repository Function Examples

namespace App\Repositories;

use App\Models\User;
use Illuminate\Http\Request;
use Arafat\LaravelRepository\Repository;

class UserRepository extends Repository
{
    /**
     * base method
     *
     * @method model()
    */
    public static function model()
    {
        return User::class;
    }

    /**
     * Create a new record from request
     */
    public static function storeByRequest(Request $request): User
    {
        return self::create([
            'first_name' => $request->first_name,
            'last_name'  => $request->last_name,
            'email'      => $request->email,
            'phone'      => $request->phone,
            // add other fields here
        ]);
    }

    /**
     * Update an existing record
     */
    public static function updateByRequest(Request $request, User $user): User
    {
        $user->update([
            'first_name' => $request->first_name,
            'last_name'  => $request->last_name,
            'email'      => $request->email,
            'phone'      => $request->phone,
            // add other fields here
        ]);

        return $user;
    }

    /**
     * Update the logged-in user's profile
     */
    public static function profileUpdate(Request $request): User
    {
        $user = auth()->user();
        $user->update($request->only(['first_name', 'last_name', 'email', 'phone']));
        return $user;
    }

    /**
     * Get order summary for a user
     */
    public static function orderSummary(User $user)
    {
        return $user->orders()
                    ->selectRaw('count(*) as total_orders, sum(total) as total_amount')
                    ->first();
    }

    /**
     * Get all active users
     */
    public static function getActiveUsers()
    {
        return self::query()->where('status', true)->get();
    }

    /**
     * Delete a user
     */
    public static function deleteUser(User $user): bool
    {
        return $user->delete();
    }
}

Using Repository in Controller

use App\Repositories\UserRepository;


// --- Custom repository methods ---

// Store user
UserRepository::storeByRequest($request);

// Update a user
$user = UserRepository::updateByRequest($request, $user);

// Update current logged-in user's profile
$currentUser = UserRepository::profileUpdate($request);

// Get order summary
$orderSummary = UserRepository::orderSummary($user);

// Get all active users
$activeUsers = UserRepository::getActiveUsers();

// Delete a user
UserRepository::deleteUser($user);

// --- Built-in repository methods (from the base repository) ---

// Get all users
$users = UserRepository::getAll();

// Query users with conditions
$users = UserRepository::query()->where('name','Jon')->get();

// Find a specific user by ID
$user = UserRepository::find($userID);

// Get the first record
$user = UserRepository::first();

// Delete a user by ID
UserRepository::delete($userID);

Publishing Stubs

php artisan vendor:publish --tag=stubs

Contribution

Feel free to open Pull Requests or submit issues. Contributions are welcome!

License

MIT

Changelog v2.0.0

  • Minimum PHP requirement updated to 7.3
  • Laravel support updated to 7 and above
  • Artisan repository generator improved with interactive output
  • Composer keywords and description updated for better search visibility
  • Stubs publishing for customization added
  • Cleaned up examples and documentation