Copy class User extends BaseModel
{
public static function searchable(): array
{
return [
"name",
"slug",
];
}
}
Copy class UserController extends BaseController
{
public function __construct(
protected UserService $userService,
protected UserResource $userResource,
protected UserCollection $userCollection
) {
}
public function index(Request $request): JsonResponse
{
try {
$filterable = $request->query();
$users = $this->userService->index($filterable);
} catch (Exception $exception) {
return $this->handleException($exception);
}
return $this->successResponse(
message: $this->lang("fetch-success"),
payload: $this->userCollection->collection($users)
);
}
}
Copy class UserService extends BaseService
{
public function __construct(
protected UserRepositoryInterface $userRepository,
protected ObjectMutable $objectMutable
) {
}
public function index(array $filterable = [], array $relationship = []): Collection|Paginator
{
$mutableBeforeData = $this->objectMutable->create([
"filterable" => $filterable,
"relationship" => $relationship
]);
$this->interceptorEventDispatch(
eventKey: "index.before",
data: $mutableBeforeData
);
$filterable = $mutableBeforeData->get("filterable");
$relationship = $mutableBeforeData->get("relationship");
$users = $this->userRepository->fetchAll($filterable, $relationship);
$this->objectMutable->create([
"users" => $users,
]);
$this->interceptorEventDispatch(
eventKey: "index.after",
data: $mutableAfterData
);
return $mutableAfterData->get("users");
}
}
To leverage the Fluent Filterable feature, structure your request query parameters as follows:
Copy /api/users/?filters[__in_id][0]=3&filters[__in_id][1]=6&filters[__in_id][2]=8
Copy SELECT * FROM `users` WHERE `id` IN (3,6,8);