Downloads
Stars
Version
This package helps developers build query filters.
This package can be installed via composer:
composer require huang-yi/laravel-filter
You need to register the service provider manually if your Laravel version is less than 5.5:
<?php // File: config/app.php
return [
'providers' => [
HuangYi\Filter\FilterServiceProvider::class,
],
];
Run this command to publish the configuration file:
$ php artisan vendor:publish --provider="HuangYi\Filter\FilterServiceProvider"
key
: The key to get filter rules from query string.
log_level
: The log level.
parser
: The filter rules parser.
To create a new filter, use the make:filter Artisan command. This command will
create a new filter class in the app/Filters
directory and name the filter in
the app/filters.php
file.
php artisan make:filter user.gender
<?php // File: app/Filters/User/Gender.php
namespace App\Filters\User;
use HuangYi\Filter\Contracts\FilterContract;
use Illuminate\Database\Eloquent\Builder;
class Gender implements FilterContract
{
/**
* Apply filter to eloquent builder.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param mixed $value
* @return void
*/
public function apply(Builder $query, $value)
{
$query->where('gender', $value);
}
}
<?php // File: app/filters.php
use HuangYi\Filter\Facades\Filter;
Filter::name('user.gender', App\Filters\User\Gender::class);
This package provides a trait HuangYi\Filter\HasFilter
.
<?php
namespace App\Http\Controllers;
use App\User;
use HuangYi\Filter\HasFilter;
class UserController extends Controller
{
use HasFilter;
/**
* User list.
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function index()
{
$query = User::query();
$this->applyFilters($query);
$users = $query->get();
return $users;
}
}
We should Base 64 encode a JSON representation of the desired filters into the
filters
query string variable.
let Base64 = require('js-base64').Base64;
let axios = require('axios');
let filters = JSON.stringify([
{
name: "user.gender",
value: "female"
},
{
name: "user.cities",
value: [1, 2, 3]
}
]);
filters = Base64.encode(filters);
axios.get('/users', {
filters: filters
}).then((response) => {
console.log(response);
});
Laravel Filter is licensed under The MIT License (MIT).