PHP code example of mohammad-fouladgar / eloquent-builder
1. Go to this page and download the library: Download mohammad-fouladgar/eloquent-builder 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/ */
mohammad-fouladgar / eloquent-builder example snippets
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
$users = User::where('is_active', true);
if ($request->has('age_more_than')) {
$users->where('age', '>', $request->age_more_than);
}
if ($request->has('gender')) {
$users->where('gender', $request->gender);
}
// A User model may have an infinite numbers of Post(One-To-Many).
if ($request->has('has_published_post')) {
$users->where(function ($query) use ($request) {
$query->whereHas('posts', function ($query) use ($request) {
$query->where('is_published', $request->has_published_post);
});
});
}
return $users->get();
}
}
namespace App\Http\Controllers;
use App\User;
use EloquentBuilder;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
return EloquentBuilder::model(User::class)
->filters($request->all())
->thenApply()
->get();
}
}
return [
/*
|--------------------------------------------------------------------------
| Eloquent Filter Settings
|--------------------------------------------------------------------------
|
| Here you should specify default all you Eloquent Model Filters.
|
*/
'namespace' => 'App\\EloquentFilters\\',
];
namespace App\EloquentFilters\User;
use Fouladgar\EloquentBuilder\Support\Foundation\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;
class AgeMoreThanFilter extends Filter
{
/**
* Apply the age condition to the query.
*/
public function apply(Builder $builder, mixed $value): Builder
{
return $builder->where('age', '>', $value);
}
}
// Use by a model class name
$users = EloquentBuilder::model(\App\Models\User::class)->filters(request()->all())->thenApply()->get();
// Use by existing query
$query = \App\Models\User::where('is_active', true);
$users = EloquentBuilder::model($query)
->filters(request()->all())
->thenApply()
->where('city', 'london')
->get();
// Use by instance of a model and push filter
$users = EloquentBuilder::model(new \App\Models\User())
->filters(request()->filter)
->filter(['age_more_than' => '30'])
->filter(['gender' => 'female'])
->thenApply()
->get();
namespace App\EloquentFilters\User;
use Fouladgar\EloquentBuilder\Concerns\FiltersDatesTrait;
use Fouladgar\EloquentBuilder\Support\Foundation\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;
class BirthDateFilter extends Filter
{
use FiltersDatesTrait;
public function apply(Builder $builder, mixed $value): Builder
{
return $this->filterDate($builder, $value, 'birth_date');
}
}
namespace App\EloquentFilters\User;
use Fouladgar\EloquentBuilder\Concerns\FiltersNumbersTrait;
use Fouladgar\EloquentBuilder\Support\Foundation\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;
class ScoreFilter extends Filter
{
use FiltersNumbersTrait;
public function apply(Builder $builder, mixed $value): Builder
{
return $this->filterNumber($builder, $value, 'score');
}
}
namespace App\EloquentBuilders\User;
use Fouladgar\EloquentBuilder\Concerns\SortableTrait;
use Fouladgar\EloquentBuilder\Support\Foundation\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;
class SortByFilter extends Filter
{
use SortableTrait;
protected array $sortable = [
'birth_date', 'score',
];
public function apply(Builder $builder, mixed $value): Builder
{
return $this->applySort($builder, $value);
}
}
/**
* Determine if the user is authorized to make this filter.
*/
public function authorize(): bool
{
if(auth()->user()->hasPremiumAccount()){
return true;
}
return false;
}
//Get api/user/search?filter[name]&filter[gender]=null&filter[age_more_than]=''&filter[published_post]=true
EloquentBuilder::model(User::class)->filters($request->filter)->thenApply();
// filters result will be:
$filters = [
'published_post' => true
];
namespace App\Controllers;
use App\Http\Resources\UserResource;
use App\Models\User;
use Fouladgar\EloquentBuilder\EloquentBuilder as Builder;
use Fouladgar\EloquentBuilder\Exceptions\FilterException;
use Illuminate\Http\Request;
class UserController
{
public function index(Request $request, User $user, Builder $builder)
{
$users = $user->newQuery()->where('is_active', true);
try {
$builder->model($users)
->filters($request->filter)
->thenApply();
} catch (FilterException $filterException) {
//...
}
return UserResource::collection($users->get());
}
}