laravel-expansions/query-control-model

v1.0.2 2022-07-25 17:57 UTC

This package is auto-updated.

Last update: 2024-05-25 21:43:30 UTC


README

No need GraqhQL. This is power query controll for your model.

Extend Query String Parameters

await axios.get('/api/my-models', {
    params: {
        
        /* Select and Append control */
        
        select: 'id,name',      // <-- select columns
        with: 'items.subItems', // <-- append with relation
        withCount: 'items',     // <-- append relation count
        limit: 10,              // <-- limit count
        
        /* Response type control */

        count: true,            // <-- count response
        // or
        paginate: 10,           // <-- pagination count
        page: 1,                // <-- pagination page
        // or
        // default: model list
    }
})

Install

composer require laravel-expansions/query-control-model

Auto Setup - Overriding artisan template

Publish to /stubs template files.

php artisan vendor:publish --tag=expansion-qcm-stubs

Next create model.

php artisan make:model SomeModel --controller --resource

Manual Setup

use QueryControlModel on your model.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use LaravelExpansions\QueryControlModel\Traits\QueryControlModel;// <-- add

class MyModel extends Model
{
    use HasFactory;
    use QueryControlModel;// <-- set

    public function scopeQueryFilter($query)
    {
        return $query;// add your local scopes
    }
}

And set scopes on your controller methods.

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\MyModel;

class MyModelController extends Controller
{
    public function index()
    {
        return MyModel
        ::queryControll()
        ->queryFilter()
        ->queryGet();
    }

    public function show($id)
    {
        return MyModel
        ::queryControl()
        ->queryFilter()
        ->findOrFail($id);
    }

    ...
}