PHP code example of redsky-thirty / laravel-api-query-builder
1. Go to this page and download the library: Download redsky-thirty/laravel-api-query-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/ */
redsky-thirty / laravel-api-query-builder example snippets
use App\Http\Resources\UserResource;
use RedskyEnvision\ApiQueryBuilder\ApiQueryBuilder;
use RedskyEnvision\ApiQueryBuilder\Sorts\Sort;
/*
* Use auto-mode based on URI parameters
*/
$results = ApiQueryBuilder::make(User::class, $request)
->allowedRelations(['profile', 'addresses', 'posts', 'posts.comments'])
->allowedFields([
'users' => ['id', 'email', 'created_at', 'profile', 'addresses', 'posts'],
'profiles' => ['*'],
'addresses' => ['*'],
'posts' => ['title', 'excerpt', 'created_at', 'comments'],
'comments' => ['username', 'message', 'created_at']
])
->allowedFilters(['name', 'email', 'created_at', 'addresses.*', 'profile.firstname', 'profile.lastname', 'posts.comments.username'])
->defaultSorts([Sort::make('created_at', 'desc')])
->prepare()
->fetch();
/*
* Force "Collection"
*
* $results = ApiQueryBuilder::make(User::class, $request)
* ...
* ->get();
*
* Force "LengthAwarePaginator"
*
* $results = ApiQueryBuilder::make(User::class, $request)
* ...
* ->paginate();
*/
return UserResource::collection($results);
use App\Http\Resources\UserResource;
use App\Models\User;
use RedskyEnvision\ApiQueryBuilder\ApiQueryBuilder;
use RedskyEnvision\ApiQueryBuilder\Resources\NotFoundResource;
$user = ApiQueryBuilder::make(User::class, $request)
->allowedRelations(['profile', 'addresses', 'posts', 'posts.comments'])
->allowedFields([
'users' => ['id', 'email', 'created_at', 'profile', 'addresses', 'posts'],
'profiles' => ['*'],
'addresses' => ['*'],
'posts' => ['title', 'excerpt', 'created_at', 'comments'],
'comments' => ['username', 'message', 'created_at']
])
->allowedFilters(['name', 'email', 'created_at', 'addresses.*', 'profile.firstname', 'profile.lastname', 'posts.comments.username'])
->prepare()
->query()
->where('id', $id)
->first();
return $user !== null ? new UserResource($user) : NotFoundResource::make();
use App\Http\Resources\UserResource;
use App\Models\User;
use RedskyEnvision\ApiQueryBuilder\ApiQueryBuilder;
$user = User::with(['profile', 'addresses', 'posts', 'posts.comments'])->inRandomOrder()->first();
ApiQueryBuilder::make(User::class, $request)
->allowedRelations(['profile', 'addresses', 'posts', 'posts.comments'])
->allowedFields([
'users' => ['id', 'email', 'created_at', 'profile', 'addresses', 'posts'],
'profiles' => ['*'],
'addresses' => ['*'],
'posts' => ['title', 'excerpt', 'created_at', 'comments'],
'comments' => ['username', 'message', 'created_at']
])
->prepareWithoutQuery();
return new UserResource($user);
class UserResource extends ApiResource {
protected function defaultFields(): array {
return ['id', 'email', 'profile', 'created_at', 'updated_at'];
}
protected function data(): array {
return [
'id' => $this->id,
'email' => $this->email,
'profile' => $this->whenLoaded('profile', fn () => new ProfileResource($this->profile)),
'posts' => $this->whenLoaded('posts', fn () => PostResource::collection($this->posts)),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at
];
}
}
bash
cd demo
composer install
php artisan migrate:fresh --seed
php artisan serve
/demo/routes/api.php
GET /api/users?
fields[users]=id,email,created_at&
where[created_at]=gt:2025-05-01%2023:59:59
GET /api/users?
fields[users]=id,email,created_at&
where[created_at]=gte:2025-05-01%2000:00:00,lte:2025-05-31%2023:59:59
GET /api/users?
fields[users]=id,email,created_at&
where[created_at]=lte:2023-12-31%2023:59:59|gte:2025-01-01%2000:00:00
GET /api/users?
fields[users]=id,email&
like[email]=gmail
GET /api/users?
fields[users]=id,email&
like[email]=!gmail
GET /api/users?
fields[users]=id,email&
like[email]=gmail|yahoo
GET /api/users?
fields[users]=id,email&
like[email]=!gmail,!yahoo