MARCH 24, 2026 • 5 MIN READ

Mastering Repository Pattern in Laravel 11

Subroto Mollik By Subroto Mollik
Code on screen

The Repository Pattern is a common architectural pattern used to abstract data access logic and keep your controllers clean. In this article, I will show you how to implement it effectively in a modern Laravel application.

Why Repositories?

When your application grows, controllers often get bloated with complex Eloquent queries and business logic. Repositories act as a middle layer between your application logic and the data source.

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." - Martin Fowler

Implementation Details

First, let's create an interface that defines the methods our repository will implement. This is crucial for abstracting the actual implementation details.

namespace App\Repositories\Contracts;

interface UserRepositoryInterface 
{
    public function getAll();
    public function findById($id);
    public function create(array $data);
}

Next, we create the concrete implementation of this interface using Laravel's Eloquent ORM.

namespace App\Repositories\Eloquent;

use App\Models\User;
use App\Repositories\Contracts\UserRepositoryInterface;

class UserRepository implements UserRepositoryInterface 
{
    protected $model;

    public function __construct(User $model)
    {
        $this->model = $model;
    }

    public function getAll()
    {
        return $this->model->all();
    }
    
    // ... other methods
}

Conclusion

By relying on interfaces instead of concrete classes, we can easily swap out our data source (e.g., from MySQL to MongoDB) without changing our controller logic. It also makes our code much easier to unit test.

Share: