Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

MPesic's avatar
Level 10

Building query with scopes on a model

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"

0 likes
3 replies
tykus's avatar
tykus
Best Answer
Level 104

Use the Eloquent Builder like this:

	$data = User::query()
		->when(true, fn ($builder) => $builder->regularUsers())
        ->filterBy($request)
        ->orderBy('created_at', 'DESC');
		
		dd($data->toSql());
MPesic's avatar
Level 10

@sr57 No not everywhere in project but only inside method for every if statement.

Anyway Tykus solution did work for me. Thanks

Please or to participate in this conversation.