LaravelPackages.net
Acme Inc.
Toggle sidebar
svil4ok/laravel-query-filters

11
0
1.0.1
About svil4ok/laravel-query-filters

svil4ok/laravel-query-filters is a Laravel package. It currently has 0 GitHub stars and 11 downloads on Packagist (latest version 1.0.1). Install it with composer require svil4ok/laravel-query-filters. Discover more Laravel packages by svil4ok or browse all Laravel packages to compare alternatives.

Last updated

Laravel Query Filters

Software License Build Status

About

Imagine if we have to filter all the users stored in our database by some criteria - name, email, location, company, etc. For example:

/users?country=Bulgaria&city=Sofia&name=Svilen

To filter by all those parameters we would need to do something like:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\User;

class UserController extends Controller
{
    public function index(Request $request)
    {
        $users = (new User)->newQuery();

        if ($request->has('country')) {
            $users->where('country', '=', $request->get('country'));
        }

        if ($request->has('city')) {
            $users->where('city', '=', $request->get('city'));
        }
        
        if ($request->has('name')) {
            $users->where('name', 'LIKE', '%' . $request->get('name') . '%');
        }

        // ...
        // other filters
        // ...

        return $users->get();
    }
}

By using this package you can easily create filters based on the requested query string and refactor the controller to something like:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\User;

class UserController extends Controller
{
    public function index(UserFilters $filters)
    {
        return User::filter($filters)->get();
    }
}

Usage

  • Add Filterable trait to your model to allow the usage of Model::filter().
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use SGP\QueryFilters\Filterable;

class User extends Model
{
    use Filterable;
}
  • Generate your model filters using the following boilerplate:
<?php

namespace App;

use SGP\QueryFilters\QueryFilters;

class UserFilters extends QueryFilters
{
    public function filterByOption($value)
    {
        return $this->builder->where('column', 'operator', $value);
    }
}
  • Use your filter:
<?php

namespace App\Http\Controllers;

use App\User;
use App\UserFilters;

class MyController extends Controller
{
    public function index(UserFilters $filters)
    {
        return User::filter($filters)->get();
    }
}

Star History Chart