PHPackages                             nathandunn/model-repositories - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. nathandunn/model-repositories

ActiveLibrary[Database &amp; ORM](/categories/database)

nathandunn/model-repositories
=============================

Easily create a repository-like entities using a Laravel Model

v1.3.0(10mo ago)015.4k↓34%1PHPPHP ^8.1

Since Feb 18Pushed 10mo ago1 watchersCompare

[ Source](https://github.com/nthndnn/model-repositories)[ Packagist](https://packagist.org/packages/nathandunn/model-repositories)[ RSS](/packages/nathandunn-model-repositories/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (4)Dependencies (2)Versions (5)Used By (1)

Laravel Model Repositories
==========================

[](#laravel-model-repositories)

A lightweight abstraction for Laravel Eloquent models that enables cleaner, more expressive repository-style access to your application's data layer.

> "Fetching collections or business-specific queries from models violates separation of concerns. This package provides an elegant way to wrap Eloquent models into repository-like entities."

Inspired by [Jack Wagstaffe](https://github.com/jackowagstaffe)

---

🚀 Installation
--------------

[](#-installation)

Install via [Composer](https://getcomposer.org/):

```
composer require nathandunn/model-repositories
```

---

📦 What This Provides
--------------------

[](#-what-this-provides)

This package allows you to:

- Encapsulate complex query logic outside your Eloquent models.
- Maintain proper separation between models and querying logic.
- Leverage dynamic method chaining like `getPaginatedForUser()` or `getForXyz()`.

---

🧠 Concept
---------

[](#-concept)

Instead of injecting Eloquent models directly into services or controllers, create a repository class per model that encapsulates query logic.

For example, instead of:

```
$records = Record::where('user_id', $user->id)->paginate();
```

You can use:

```
$records = $recordRepository->getPaginatedForUser($user);
```

---

🛠 Usage
-------

[](#-usage)

### 1. Create a Custom Repository

[](#1-create-a-custom-repository)

```
