PHP code example of abdrzakoxa / laravel-eloquent-filter
1. Go to this page and download the library: Download abdrzakoxa/laravel-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/ */
abdrzakoxa / laravel-eloquent-filter example snippets
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
$query = User::query();
$query->when($request->has('name'), function (Builder $builder) use ($request) {
$builder->where('name', 'LIKE', '%'.$request->input('name').'%');
});
if (auth()->user()->isAdmin()) {
$allowedRoles = ['admin', 'manager', 'client'];
} elseif (auth()->user()->isManager()) {
$allowedRoles = ['client'];
} else {
$allowedRoles = [];
}
$roles = [];
foreach ((array) $request->input('roles') as $role) {
if (in_array($role, $allowedRoles, true)) {
$roles[] = $role;
}
}
$query->whereHas('roles', function ($q) use ($roles) {
return $q->whereIn('name', $roles);
});
if ($request->has('limit') && is_numeric($request->input('limit')) && $request->input('limit') < 100) {
$limit = (int) $request->input('limit');
} else {
$limit = 10;
}
$query->limit($limit);
return $query->get();
}
}
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
return User::filter($request->all())->get();
}
}
namespace App\EloquentFilters;
use Illuminate\Database\Eloquent\Builder;
class NameFilter
{
/**
* Apply the filter after validation passes & sanitize
* @param string $value
* @param Builder $builder
*/
public function handle(string $value, Builder $builder): void
{
$builder->where('name', $value);
}
/**
* @param mixed $value
* @return mixed
*/
public function sanitize($value)
{
return is_string($value) ? $value : '';
}
/**
* @param mixed $value
* @return bool|string|array
*/
public function validate($value)
{
return strlen($value) > 5 && strlen($value) < 100;
}
}
namespace App\Models;
use App\EloquentFilters\NameFilter;
use Abdrzakoxa\EloquentFilter\Traits\Filterable;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use Filterable;
protected $filters = [
NameFilter::class,
];
}
// ...
use Abdrzakoxa\EloquentFilter\Traits\Filterable;
use Abdrzakoxa\EloquentFilter\Filters\BetweenFilter;
class User extends Model
{
use Filterable;
protected $filters = [
BetweenFilter::class . ':approved_at' => 'approved_between',
BetweenFilter::class => 'created_between',
];
}
User::filter($request->all())->get();
// ...
use Abdrzakoxa\EloquentFilter\Traits\Filterable;
use Abdrzakoxa\EloquentFilter\Filters\LimitFilter;
class User extends Model
{
use Filterable;
protected $filters = [
LimitFilter::class
];
}
User::filter($request->all())->get();
// ...
use Abdrzakoxa\EloquentFilter\Traits\Filterable;
use Abdrzakoxa\EloquentFilter\Filters\SortingFilter;
class User extends Model
{
use Filterable;
protected $filters = [
SortingFilter::class . ':approved_at' // sorting by approved_at column
];
}
User::filter($request->all())->get();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.