Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Repository Laravel Package

arafat69/laravel-repository

View on GitHub
Deep Wiki
Context7

Laravel Repository

A lightweight yet powerful Laravel repository pattern package with built-in Artisan commands to rapidly generate repositories. Designed to promote clean architecture, improve code maintainability, and simplify database interactions. Fully compatible with Laravel 7+.


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 installation, the package automatically creates the app/Repositories directory to organize your repository classes.


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


Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
daikazu/eloquent-salesforce-objects
unseen-codes/chat
romalytar/yammi-jobs-monitoring-laravel
kisame76/filament-db-table-state
nqxcode/laravel-lucene-search
dpfx/laravel-livewire-wizards
workos/workos-php-laravel
sofa/laravel-global-scope
nawasara/auth-primitives
adhocrat-io/arkhe-main
make-dev/orca-harpoon
itsemon245/lamet
baks-dev/dashboard
amoifr/pickle-panther-bundle
make-dev/orca
dmstr/symfony-system-resources-bundle
dmstr/symfony-job-queue-bundle
dmstr/openapi-json-schema-bundle
dmstr/keycloak-security-bundle
dmstr/doctrine-audit-log-bundle