PHPackages                             nvmcommunity/laravel-eloquent-api - 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. [HTTP &amp; Networking](/categories/http)
4. /
5. nvmcommunity/laravel-eloquent-api

ActiveLibrary[HTTP &amp; Networking](/categories/http)

nvmcommunity/laravel-eloquent-api
=================================

Easily build Eloquent queries from API requests using Alchemist Restful API.

0.0.4(2y ago)286996MITPHPPHP ^8.1

Since Apr 18Pushed 1y ago2 watchersCompare

[ Source](https://github.com/nvmcommunity/laravel-eloquent-api)[ Packagist](https://packagist.org/packages/nvmcommunity/laravel-eloquent-api)[ RSS](/packages/nvmcommunity-laravel-eloquent-api/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (5)Used By (0)

Laravel Eloquent API
====================

[](#laravel-eloquent-api)

Easily build Eloquent queries from API requests using Alchemist Restful API.

Description
-----------

[](#description)

This is a package that helps you integrate Alchemist Restful API with Laravel Eloquent. for more information about concepts and usage of Alchemist Restful API, please refer to the [Alchemist Restful API documentation](https://github.com/nvmcommunity/alchemist-restful-api)

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

[](#installation)

```
composer require nvmcommunity/laravel-eloquent-api
```

Basic usage
-----------

[](#basic-usage)

### Step 1: Define the API class

[](#step-1-define-the-api-class)

```
use Nvmcommunity\Alchemist\RestfulApi\Common\Exceptions\AlchemistRestfulApiException;
use Nvmcommunity\Alchemist\RestfulApi\Common\Integrations\AlchemistQueryable;
use Nvmcommunity\Alchemist\RestfulApi\FieldSelector\Handlers\FieldSelector;
use Nvmcommunity\Alchemist\RestfulApi\ResourceFilter\Handlers\ResourceFilter;
use Nvmcommunity\Alchemist\RestfulApi\ResourceFilter\Objects\FilteringRules;
use Nvmcommunity\Alchemist\RestfulApi\ResourcePaginations\OffsetPaginator\Handlers\ResourceOffsetPaginator;
use Nvmcommunity\Alchemist\RestfulApi\ResourceSearch\Handlers\ResourceSearch;
use Nvmcommunity\Alchemist\RestfulApi\ResourceSort\Handlers\ResourceSort;

class UserApiQuery extends AlchemistQueryable
{
    /**
     * @param FieldSelector $fieldSelector
     * @return void
     */
    public static function fieldSelector(FieldSelector $fieldSelector): void
    {
        $fieldSelector->defineFieldStructure([
            'id', 'name', 'email', 'created_at'
        ])
        ->defineDefaultFields(['id']);
    }

    /**
     * @param ResourceFilter $resourceFilter
     * @return void
     */
    public static function resourceFilter(ResourceFilter $resourceFilter): void
    {
        $resourceFilter->defineFilteringRules([
            FilteringRules::String('id', ['eq']),
            FilteringRules::String('name', ['eq', 'contains']),
            FilteringRules::String('email', ['eq', 'contains']),
            FilteringRules::Datetime('created_at', ['eq', 'gte', 'lte', 'between']),
        ]);
    }

    /**
     * @param ResourceOffsetPaginator $resourceOffsetPaginator
     * @return void
     */
    public static function resourceOffsetPaginator(ResourceOffsetPaginator $resourceOffsetPaginator): void
    {
        $resourceOffsetPaginator->defineDefaultLimit(10)
            ->defineMaxLimit(1000);
    }

    /**
     * @param ResourceSearch $resourceSearch
     * @return void
     */
    public static function resourceSearch(ResourceSearch $resourceSearch): void
    {
        $resourceSearch->defineSearchCondition('name');
    }

    /**
     * @param ResourceSort $resourceSort
     * @return void
     * @throws AlchemistRestfulApiException
     */
    public static function resourceSort(ResourceSort $resourceSort): void
    {
        $resourceSort->defineDefaultSort('id')
            ->defineDefaultDirection('desc')
            ->defineSortableFields(['id', 'name']);
    }
}
```

### Step 2: Validate &amp; respond to the request

[](#step-2-validate--respond-to-the-request)

Make sure to validate the input parameters passed in from the request input by using the `$eloquentBuilder->validate()` method before executing the query and responding to the request.

```
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Nvmcommunity\Alchemist\RestfulApi\Common\Exceptions\AlchemistRestfulApiException;
use Nvmcommunity\EloquentApi\EloquentBuilder;

class UserController extends Controller
{
    /**
     * @param Request $request
     * @param JsonResponse $response
     * @return JsonResponse
     * @throws AlchemistRestfulApiException
     */
    public function index(Request $request, JsonResponse $response): JsonResponse
    {
        $eloquentBuilder = EloquentBuilder::for(User::class, UserApiQuery::class, $request->input());

        // Validate the input parameters
        if (! $eloquentBuilder->validate($e)->passes()) {
            return $response->setData($e->getErrors())->setStatusCode(400);
        }

        // It's safe to execute the query now.
        // Return the result as JSON
        return $response->setData($eloquentBuilder->getBuilder()->get());
    }
}
```

Contributors
------------

[](#contributors)

### Code Contributors

[](#code-contributors)

This project exists thanks to all the people who contribute.

[![](https://camo.githubusercontent.com/5e2896bcd2317899646c0a8d3eb34498e3c78b7fcb348e0aa6c5fb36e733b4a3/68747470733a2f2f636f6e747269622e726f636b732f696d6167653f7265706f3d6e766d636f6d6d756e6974792f6c61726176656c2d656c6f7175656e742d617069)](https://github.com/nvmcommunity/laravel-eloquent-api/graphs/contributors)License
-------

[](#license)

This Project is [MIT](./LICENSE) Licensed

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance27

Infrequent updates — may be unmaintained

Popularity25

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 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

4

Last Release

754d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/aabe2550b4ada316a81bf54ce2b4ab704500b497bd042037257e12b5d82071cd?d=identicon)[nvmcommunity](/maintainers/nvmcommunity)

---

Top Contributors

[![skillaug](https://avatars.githubusercontent.com/u/22816936?v=4)](https://github.com/skillaug "skillaug (8 commits)")

---

Tags

jsonapilaravelrestlaravel-query-builderservice discoveryREST APIRESTful APIrestfullaravel-apinvmcommunity.ioNgười-Viết-Mãeloquent-api

### Embed Badge

![Health badge](/badges/nvmcommunity-laravel-eloquent-api/health.svg)

```
[![Health](https://phpackages.com/badges/nvmcommunity-laravel-eloquent-api/health.svg)](https://phpackages.com/packages/nvmcommunity-laravel-eloquent-api)
```

###  Alternatives

[chrisbjr/api-guard

A simple way of authenticating your APIs with API keys using Laravel

698375.6k5](/packages/chrisbjr-api-guard)[guanguans/laravel-api-response

Normalize and standardize Laravel API response data structure. - 规范化和标准化 Laravel API 响应数据结构。

485.6k](/packages/guanguans-laravel-api-response)[api-platform/laravel

API Platform support for Laravel

59126.4k6](/packages/api-platform-laravel)

PHPackages © 2026

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