Via Composer
$ composer require apichef/laravel-request-to-eloquent
We use apichef/laravel-request-query-helper
package as a dependency. You can publish it's the config file with:
$ php artisan vendor:publish --provider="ApiChef\RequestQueryHelper\RequestQueryHelperServiceProvider"
Model class:
namespace App;
use App\Comment;
use App\Tag;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $dates = [
'published_at',
];
public function comments()
{
return $this->hasMany(Comment::class);
}
public function tags()
{
return $this->belongsToMany(Tag::class);
}
public function scopeDraft(Builder $builder)
{
return $builder->whereNull('published_at');
}
}
Request query class:
namespace App\Queries;
use App\Post;
use ApiChef\RequestToEloquent\QueryBuilderAbstract;
use Illuminate\Http\Request;
class PostListQuery extends QueryBuilderAbstract
{
protected function init(Request $request)
{
return Post::query();
}
protected $availableIncludes = [
'comments',
'tags',
];
protected $availableFilters = [
'draft',
];
protected $availableSorts = [
'published_at',
];
}
Controller:
namespace App\Http\Controllers;
use App\User;
use App\Queries\PostListQuery;
class DashboardController extends Controller
{
public function index(PostListQuery $postListQuery)
{
return $postListQuery
->parseAllowedIncludes([
'comments',
'tags',
])
->get()
->toArray();
}
}
Http request:
GET /posts?include=comments,tags&filter[draft]&sort=-published_at
Please see CHANGELOG for more information on what has changed recently.
$ composer test
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.