Looking to hire Laravel developers? Try LaraJobs
This package is not available.

laravel-query-filters maintained by svil4ok

Author
Last update
2019/06/22 16:01 (dev-master)
License
Links
Downloads
11

Comments
comments powered by Disqus

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();
    }
}