PHP code example of laravellegends / eloquent-filter
1. Go to this page and download the library: Download laravellegends/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/ */
laravellegends / eloquent-filter example snippets
use LaravelLegends\EloquentFilter\Concerns\HasFilter;
class User extends Model
{
use HasFilter;
}
class UsersController extends Controller
{
use App\Models\User;
public function index()
{
return User::filter()->paginate();
}
// or
public function index()
{
return User::latest('id')->filter()->paginate();
}
// or
public function index(Request $request)
{
return User::filter($request)->paginate();
}
}
namespace App\Filters;
use LaravelLegends\EloquentFilter\Filters\ModelFilter;
class UserFilter extends ModelFilter
{
public function getFilterables(): array
{
return [
'role_id' => 'not_equal', // or ['not_equal']
'name' => ['contains', 'starts_with'],
];
}
}
use App\Models\User;
use Illuminate\Http\Request;
use LaravelLegends\EloquentFilter\Filter;
class UsersController extends Controller
{
// api/users?starts_with[name]=Wallace¬_equal[role_id]=2
public function index(Request $request)
{
return User::withFilter(new UserFilter, $request)
->orderBy('name')
->get();
}
}
class User extends Model
{
use HasFilter;
public function phones()
{
return $this->hasMany(Phone::class, 'user_id');
}
}
class UserFilter extends ModelFilter
{
public function getFilterables(): array
{
return [
'id' => ['exact', 'not_equal'],
'created_at' => ['year_exact', 'date_max', 'date_min'],
'phones.number' => ['contains'],
// or
'phones' => new PhoneFilter,
];
}
}
class PhoneFilter extends ModelFilter
{
public function getFilterables(): array
{
return [
'number' => 'contains'
];
}
}
class UserController extends Controller
{
public function index()
{
// api/users?not_in[role_id][]=1¬_in[role_id][]=3
// select * from users where (role_id NOT IN (1, 3))
return User::withFilter(new UserFilter)->paginate();
}
// Or, apply filter as nested query
public function index()
{
// api/users?exact[role_id]=1
// select * from users where (role_id = 1)
return User::where(UserFilter::toClosure())->paginate();
}
// Or apply in your query as base condition
public function index()
{
// api/users?exact[role_id]=1
// select * from users where role_id = 1
return User::tap(UserFilter::toClosure())->paginate();
}
}