Use the Eloquent Builder like this:
$data = User::query()
->when(true, fn ($builder) => $builder->regularUsers())
->filterBy($request)
->orderBy('created_at', 'DESC');
dd($data->toSql());
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
I'm not sure if this is possible but I'm trying to retrieve a users based on some true/false fields in the system.
User model
public function scopeRegularUsers($query): mixed
{
return $query->where('type_id', '=', UserType::REGULAR);
}
Repository
$data = new User();
if (true) {
$data->regularUsers();
}
$data->filterBy($request)
->orderBy('created_at', 'DESC');
dd($data->toSql());
The reason why I'm doing this is because I want to filter every time. without repeating the scopes like this:
$data = new User();
if (true) { // added true just for simplicity. here will be some dynamic statement
return $data->regularUsers()
->filterBy($request)
->orderBy('created_at', 'DESC');
}
return $data->filterBy($request)
->orderBy('created_at', 'DESC');
But everytime I get the query like I didn't chained anything.
"select * from users where users.deleted_at is null"
Use the Eloquent Builder like this:
$data = User::query()
->when(true, fn ($builder) => $builder->regularUsers())
->filterBy($request)
->orderBy('created_at', 'DESC');
dd($data->toSql());
Please or to participate in this conversation.