Skip to content

melloc01/fetch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fetch

Software License

Query Eloquent models easily. it is ideal for who uses Laravel as an API

Install

Via Composer

$ composer require rcbytes/fetch

On config/app.php

Service Provider:

rcbytes\fetch\FetchServiceProvider::class

Facade:

'Fetch' => rcbytes\fetch\Fetch::class

Usage

Controller

...

class UserController extends Controller

	public function index(Request $request)
	{
	   
	    // your criteria will overwrite criteria from Request->where  
	    $where = [ "account_id" => $request->user()->account_id ];
  		return Fetch::all(App\User::query(), $where);
	
	}
	
	public function show($id)
	{
	
	    // third parameter $key defaults to "id"
  		return Fetch::one(App\User::query(), $id);
	
	}

...

Model:

class User implements AuthenticatableContract, CanResetPasswordContract
{
    ...
    public function friends()
    {
    
    	return $this->hasMany(\App\User::class);
    	
    }
    
    public function posts()
    {
    
    	return $this->hasMany(\App\Model\Post::class);
    	
    }
    ...
}

Request :

Get all Users with their Posts and Friends

GET /user?with=["posts", "friends"]

Get Users with their Posts and Friends that age equals 30

GET /user?with=["posts", "friends"]&where={age: 30}

Get Users with their Posts and their Comments and Friends that have at least one Friend with age greater than 30

GET /user?with=["posts.comments", "friends"]&where={"friends.age":[ ">", 30]}

Get User of key = 1 with their Posts, Friends and Friends of Friends

GET /user/1?with=["posts", "friends.friends"]

Parameters:

  • array with: It expects the Models to have the relationship method. Accepts dot notation, both Models come when used. eg.: ?with:["posts.comments"]. User::posts and Post::comments methods must exist
  • object|mixed where: It expects the Models to have the queried columns. Accepts dot notation, queries the relationship, if found at least one that matches the criteria, it returns the Model. eg.: ?where:{age: 30}, ?where:{age:[">", 30]}, ?where:{"friends.age":[">", 30]}
  • integer take: takes this number of Models
  • integer paginate: also known as per page
  • integer page: page number

Change log

Please see CHANGELOG for more information what has changed recently.

Testing

$ to do

Contributing

Please see CONTRIBUTING and CONDUCT for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Laravel Package to query Eloquent Models

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages