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
Requires
- php: >=7.0.0
- illuminate/support: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
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"}, ] }