PHPackages                             afurgeri/crud-manager - 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. afurgeri/crud-manager

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

afurgeri/crud-manager
=====================

Reusable, framework-agnostic CrudManager and FiltersAdapter for Laravel Eloquent — centralized CRUD operations, structured filtering, sorting, search, pagination

0.1.1(2w ago)03↓100%MITPHPPHP &gt;=8.0

Since May 24Pushed 2w agoCompare

[ Source](https://github.com/afurgeri/crud-manager)[ Packagist](https://packagist.org/packages/afurgeri/crud-manager)[ RSS](/packages/afurgeri-crud-manager/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (7)Versions (3)Used By (0)

Crud Manager
============

[](#crud-manager)

A small, reusable CRUD helper for Laravel Eloquent projects. Centralizes query/pagination/filtering/search/sort logic so your controllers stay thin.

Installation
------------

[](#installation)

```
composer require afurgeri/crud-manager
```

What's included
---------------

[](#whats-included)

- **`Crud\Services\CrudManager`** — centralized paginate, listAll, find, create, update, delete
- **`Crud\Services\FiltersAdapter`** — translates structured filter documents into Eloquent clauses

Quick Start
-----------

[](#quick-start)

```
use Crud\Services\CrudManager;
use App\Models\Product;

class ProductController extends Controller
{
    protected CrudManager $manager;

    public function __construct()
    {
        $this->manager = new CrudManager(Product::class, [
            'per_page' => 10,
            'with' => ['supplier'],
        ]);
    }

    public function index(Request $request)
    {
        $filters = json_decode($request->input('filters'), true) ?? [];

        return response()->json(
            $this->manager->paginate([
                'filters' => $filters,
                'search' => $request->input('search'),
                'searchFields' => ['name', 'code'],
                'sort' => $request->input('sort'),
            ])
        );
    }

    public function store(Request $request)
    {
        $product = $this->manager->create($request->validated());
        return response()->json($product, 201);
    }

    public function update(Request $request, Product $product)
    {
        $product = $this->manager->update($product, $request->validated());
        return response()->json($product);
    }

    public function destroy(Product $product)
    {
        $this->manager->delete($product);
        return response()->noContent();
    }
}
```

Filters Document
----------------

[](#filters-document)

The manager accepts a structured filters array with operator keys:

OperatorSQLExample`eq``WHERE =``{"eq": {"name": "Pepe"}}``like``WHERE LIKE %%``{"like": {"name": "pep"}}``gt`, `gte`, `lt`, `lte`Comparison`{"gte": {"stock": 5}}``in`, `not_in``WHERE IN``{"in": {"id": [1,2,3]}}``date_eq`, `date_gt`, etc.`whereDate``{"date_gte": {"created_at": "2024-01-01"}}`### Relation filters

[](#relation-filters)

Use dot-notation to filter on related models:

```
{"eq": {"supplier.name": "ACME"}}
```

This translates to `whereHas('supplier', fn($q) => $q->where('name', 'ACME'))`.

### Whitelisting fields

[](#whitelisting-fields)

```
new CrudManager(Product::class, [
    'allowedFields' => ['name', 'code', 'stock', 'supplier.name'],
]);
```

### Sorting

[](#sorting)

```
// Ascending
$manager->paginate(['sort' => 'name']);

// Descending (prefix with -)
$manager->paginate(['sort' => '-created_at']);
```

### Search

[](#search)

```
$manager->paginate([
    'search' => 'drill',
    'searchFields' => ['name', 'code'],
]);
```

### Reduced lists

[](#reduced-lists)

```
// Useful for dropdowns/combo boxes
$manager->listAll([
    'select' => ['id', 'name'],
    'sort' => 'name',
]);
```

Extending
---------

[](#extending)

To add new filter operators, extend `FiltersAdapter`:

```
class MyAdapter extends FiltersAdapter
{
    protected array $ops = ['eq', 'like', ..., 'my_custom_op'];

    protected function applyClause(Builder $query, string $field, string $op, $value): void
    {
        if ($op === 'my_custom_op') {
            $query->whereRaw('...');
            return;
        }
        parent::applyClause($query, $field, $op, $value);
    }
}
```

Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

MIT

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance97

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity29

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

16d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/2dab5718ccd0d1302beee1c99e22913cf3eced5b44d3e52766195de83440dd30?d=identicon)[afurgeri](/maintainers/afurgeri)

---

Top Contributors

[![afurgeri](https://avatars.githubusercontent.com/u/106419289?v=4)](https://github.com/afurgeri "afurgeri (2 commits)")

---

Tags

laravelpaginationeloquentcrudquery builderfilters

###  Code Quality

TestsPest

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/afurgeri-crud-manager/health.svg)

```
[![Health](https://phpackages.com/badges/afurgeri-crud-manager/health.svg)](https://phpackages.com/packages/afurgeri-crud-manager)
```

###  Alternatives

[yajra/laravel-oci8

Oracle DB driver for Laravel via OCI8

8733.1M23](/packages/yajra-laravel-oci8)[kirschbaum-development/eloquent-power-joins

The Laravel magic applied to joins.

1.6k29.9M42](/packages/kirschbaum-development-eloquent-power-joins)[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[watson/validating

Eloquent model validating trait.

9743.4M53](/packages/watson-validating)[cybercog/laravel-love

Make Laravel Eloquent models reactable with any type of emotions in a minutes!

1.2k322.4k1](/packages/cybercog-laravel-love)[reedware/laravel-relation-joins

Adds the ability to join on a relationship by name.

2121.2M16](/packages/reedware-laravel-relation-joins)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
