hamba/queryget

There is no license information available for the latest version (v0.4.0) of this package.

Helper for query eloquent model from request

v0.4.0 2018-05-23 01:50 UTC

This package is auto-updated.

Last update: 2024-04-08 10:46:07 UTC


README

Laravel query get is helper to perform query to eloquent model.

Read full documentation

Installation

composer require hamba/queryget

Usage

You have these models:

class User extends Model{
    protected $fillable = [
        'username', 'email'
    ];

    public function roles()
    {
        return $this->belongsToMany(Role::class, 'role_users');
    }

    public $queryable = [
        'email' => 'string',//enable attribute email to be queried
        'name' => 'string:username',//enable attribute with alias
        'roles' => 'relation'//enable relation 'roles'
    ];
}
class Role extends Model
{
    protected $fillable = [
        'name', 'permissions',
    ];
    public $queryable = ['name', 'permissions'];
}

and you have this controller:

class UserController extends Controller
{
    public function index()
    {
        return qg(User::class)->apply()->get();
    }
}

and this route:

Route::get('users', 'UserController@index');

With QueryGet you can do these requests:

Select attribute or relation:

  • /users?props[]=name
{
    "total":3,
    "data":[
        {"id":1,"name":"User 1"},
        {"id":2,"name":"User 2"},
        {"id":3,"name":"User 3"},
    ]
}
  • /users?props[]=name&props[]=roles.name
{
    "total":3,
    "data":[
        {
            "id":1,
            "name":"User 1",
            "email":"user1@mail.com",
            "roles":[
                {"id":1,"name":"admin"},
                {"id":2,"name":"manager"}
            ]
        },
        {
            "id":2,
            "name":"User 2",
            "email":"user2@mail.com",
            "roles":[
                {"id":2,"name":"manager"}
            ]
        }, 
        {
            "id":3,
            "name":"User 3",
            "email":"user3@mail.com",
            "roles":[
                {"id":3,"name":"employee"}
            ]
        }, 
    ]
}

Filter attribute or relation:

  • /users?props=id&email=user1%
{
    "total":1,
    "data":[{"id":1}]
}

Sort attribute or relation

  • /users?props[]=id&props[]=name&sortby=name_desc
{
    "total":3,
    "data":[
        {"id":3,"name":"User 3"},
        {"id":2,"name":"User 2"},
        {"id":1,"name":"User 1"}
    ]
}

Do pagination

  • /users?props[]=name&page=1&pagesize=1
{
    "total":3,
    "data":[
        {"id":2,"name":"User 2"},
    ]
}