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


['name' => 'avf', 'roles' => ['admin', 'manager', 'client'], 'limit' => '10']



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