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
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();
}
}
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;
}
<?php
namespace App;
use SGP\QueryFilters\QueryFilters;
class UserFilters extends QueryFilters
{
public function filterByOption($value)
{
return $this->builder->where('column', 'operator', $value);
}
}
<?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();
}
}