arafat69/laravel-repository
Laravel Repository Pattern package with built-in Artisan commands. Easily create repositories, follow clean architecture, and simplify database interactions.
6,978
5
| Install | |
|---|---|
composer require arafat69/laravel-repository |
|
| Latest Version: | v3.1.1 |
| PHP: | >=7.3 |
| License: | MIT |
| Last Updated: | Sep 8, 2026 |
| Links: | GitHub · Packagist |
Maintainer: arafat-dev
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 arafatdev/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
Related Packages
nahid-ferdous/laravel-module-generator
Speeds up Laravel development by automating repetitive tasks. This package helps...
3,518
2
code generator
controller generator
crud generator
laravel
laravel artisan
laravel automation
laravel development tools
laravel module
laravel package
laravel scaffolding
migration generator
model generator
module generator
php code generation
request generator
resource generator
scaffolding
service layer
yaml