1. Go to this page and download the library: Download altrntv/eloquent-filter library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
altrntv / eloquent-filter example snippets
use Altrntv\EloquentFilter\Traits\Filterable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Foundation\Auth\User as Authenticatable;
/**
* @method static Builder<static>|self filter(array<string, mixed> $parameters)
* @method static Builder<static>|self filterByRequest()
*/
class User extends Authenticatable
{
use Filterable;
}
use Altrntv\EloquentFilter\Filters\EloquentFilter;
use Illuminate\Database\Eloquent\Builder;
class UserFilter extends EloquentFilter
{
public function name(string $value): void
{
$this->builder
->whereLike('name', "%{$value}%");
}
public function age(string $value): void
{
$this->builder
->where('age', '>=', $value);
}
}
use App\Models\User;
use App\Http\Requests\UserIndexRequest;
use Illuminate\Http\JsonResponse;
final class UserController extends Controller
{
public function index(UserIndexRequest $request): JsonResponse
{
$users = User::query()
->filterByRequest()
->get();
return $users->toResourceCollection();
}
}
use Illuminate\Foundation\Http\FormRequest;
class UserIndexRequest extends FormRequest
{
public function rules(): array
{
return [
'filter.name' => ['string', 'max:255'],
'filter.age' => ['integer', 'min:0', 'max:150'],
];
}
}
use Altrntv\EloquentFilter\Filters\EloquentFilter;
use Illuminate\Database\Eloquent\Builder;
class UserFilter extends EloquentFilter
{
protected array $casts = [
'age' => 'integer',
'roles' => 'array',
];
public function age(int $value): void
{
$this->builder
->where('age', '>=', $value);
}
public function roles(array $value): void
{
$this->builder
->whereIn('roles', $value);
}
}
use Illuminate\Foundation\Http\FormRequest;
class UserIndexRequest extends FormRequest
{
public function rules(): array
{
return [
'filter.name' => ['string', 'max:255'],
'filter.age' => ['integer', 'min:0', 'max:150'],
'filter.roles' => ['string', 'regex:/^\d+(,\d+)*$/'],
];
}
}
use Altrntv\EloquentFilter\Filters\EloquentFilter;
use Illuminate\Database\Eloquent\Builder;
class UserFilter extends EloquentFilter
{
protected array $joinParameters = [
'vip_at' => ['vip_at_from', 'vip_at_to'],
];
public function vipAt(string $vipAtFrom, string $vipAtTo): void
{
$this->builder
->where(function (Builder $query) use ($vipAtFrom, $vipAtTo) {
$query
->whereDate('vip_from', '<=', $vipAtTo)
->whereDate('vip_to', '>=', $vipAtFrom);
});
}
}
use Altrntv\EloquentFilter\Traits\Sortable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Foundation\Auth\User as Authenticatable;
/**
* @method static Builder<static>|self sort(string $parameters)
* @method static Builder<static>|self sortByRequest()
*/
class User extends Authenticatable
{
use Sortable;
}
use Altrntv\EloquentFilter\Sorts\EloquentSort;
use Illuminate\Database\Eloquent\Builder;
class UserSort extends EloquentSort
{
public function name(string $direction): void
{
$this->builder
->orderBy('name', $direction);
}
public function age(string $direction): void
{
$this->builder
->orderBy('age', $direction);
}
}