1. Go to this page and download the library: Download mjahn/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/ */
namespace App\Http\Controllers;
use App\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)
{
$users = EloquentBuilder::to(User::class, $request->all());
return $users->get();
}
}
return [
/*
|--------------------------------------------------------------------------
| Eloquent Filter Settings
|--------------------------------------------------------------------------
|
| This is the namespace all you Eloquent Model Filters will reside
|
*/
'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.
*
* @param Builder $builder
* @param mixed $value
*
* @return Builder
*/
public function apply(Builder $builder, $value): Builder
{
return $builder->where('age', '>', $value);
}
}
/**
* Determine if the user is authorized to make this filter.
*
* @return bool
*/
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::to(User::class,$request->only('filter'));
// filters result will be:
$filters = [
'published_post' => true
];
namespace App\Http\Controllers;
use App\User;
use EloquentBuilder;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
$query = User::where('is_active', true);
$users = EloquentBuilder::to($query, $request->all())
->where('city', 'london')
->paginate();
return $users;
}
}
namespace App\Repositories;
use App\User;
use Fouladgar\EloquentBuilder\EloquentBuilder;
class UserRepository extends BaseRepository
{
public function __construct(EloquentBuilder $eloquentBuilder)
{
$this->eloquentBuilder = $eloquentBuilder;
$this->makeModel();
}
public function makeModel()
{
return $this->setModel($this->model());
}
public function setModel($model)
{
$this->model = app()->make($model);
return $this;
}
public function model()
{
return User::class;
}
public function all($columns = ['*'])
{
return $this->model->get($columns);
}
// other methods ...
public function filters(array $filters)
{
$this->model = $this->eloquentBuilder->to($this->model(), $filters);
return $this;
}
}
namespace App\Http\Controllers;
use App\Repositories\UserRepository;
use Illuminate\Http\Request;
class UserController extends Controller
{
protected $users;
public function __construct(UserRepository $users)
{
$this->users = $users;
}
public function index(Request $request)
{
return $this->users->filters($request->all())->get();
}
}
shell
php artisan eloquent-builder:publish
sh
php artisan vendor:publish --provider="Fouladgar\EloquentBuilder\ServiceProvider" --tag="config"
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.