1. Go to this page and download the library: Download zaruto/queryable 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/ */
zaruto / queryable example snippets
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Zaruto\Queryable\Attributes\QueryableFilterable;
use Zaruto\Queryable\Attributes\QueryableSearchable;
use Zaruto\Queryable\Attributes\QueryableSortable;
use Zaruto\Queryable\Concerns\Filterable;
use Zaruto\Queryable\Concerns\Searchable;
use Zaruto\Queryable\Concerns\Sortable;
#[QueryableSearchable([
'name' => 'like',
'email' => 'starts_with',
'team.name' => 'like',
])]
#[QueryableFilterable([
'status' => ['eq', 'ne', 'in', 'not in'],
'score' => ['gt', 'gte', 'lt', 'lte'],
'name' => ['like', 'contains', 'starts_with'],
'team.name' => ['eq', 'like'],
])]
#[QueryableSortable(['id', 'name', 'created_at'])]
class Customer extends Model
{
use Searchable;
use Filterable;
use Sortable;
}
declare(strict_types=1);
namespace App\Http\Controllers;
use App\Models\Customer;
use Illuminate\Http\Request;
final class CustomerIndexController
{
public function __invoke(Request $request)
{
$query = Customer::query()
->search((string) $request->query('search', ''))
->filter()
->sort(
$request->query('sort_by'),
(string) $request->query('direction', 'asc')
);
return $query->paginate(25);
}
}
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Zaruto\Queryable\Concerns\Filterable;
use Zaruto\Queryable\Concerns\Searchable;
use Zaruto\Queryable\Concerns\Sortable;
class Order extends Model
{
use Searchable;
use Filterable;
use Sortable;
public static function searchable(): array
{
return [
'number' => 'starts_with',
'customer.name' => 'like',
];
}
public static function filters(): array
{
return [
'status' => ['eq', 'ne', 'in'],
'total' => ['gt', 'gte', 'lt', 'lte'],
'customer.name' => ['like'],
];
}
public static function sortable(): array
{
return ['id', 'number', 'created_at'];
}
}
declare(strict_types=1);
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Customer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
final class CustomerController extends Controller
{
public function index(Request $request): JsonResponse
{
$customers = Customer::query()
->search((string) $request->query('search', ''))
->filter()
->sort(
$request->query('sort_by'),
(string) $request->query('direction', 'asc')
)
->paginate((int) $request->query('per_page', 25));
return response()->json($customers);
}
}