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

gidaban79's avatar

Scope with related user roles

Hello guys i have some query to calculate distance in radius from user type in postcode

public function scopeCloseTo(
        $query,
        $location = [],
        $amenities = null,
        $services = null,
        $features = null,
        $limit = 18,
        $radius = 20
    ) {
        $sql = "(6371 * acos(cos(radians(".$location['latitude'].")) * cos(radians(lat)) * cos(radians(lng) - radians(".$location['longitude'].")) + sin(radians(".$location['latitude'].")) * sin(radians(lat))))";
        return $query
            ->select(['id', 'company_name', 'address', 'slug', 'user_id'])
            ->selectRaw("{$sql} AS distance")
            ->whereRaw("{$sql} < ?", [$radius])
            ->when($amenities, function ($query) use ($amenities) {
                $query->with('amenities')
                    ->whereHas('amenities', function ($query) use ($amenities) {
                        $query->whereIn('amenity_id', $amenities);
                    });
            })->when($services, function ($query) use ($services) {
                $query->with('services')
                    ->whereHas('services', function ($query) use ($services) {
                        $query->whereIn('service_id', $services);
                    });
            })->when($features, function ($query) use ($features) {
                $query->with('features')
                    ->whereHas('features', function ($query) use ($features) {
                        $query->whereIn('feature_id', $features);
                    });
            })
            ->orderBy('distance')
            ->limit($limit)
            ->get();
    }

query working well also when $amenities,$services,$features working well, however i have to also attach role for each user which belong to. In results i am getting `user_id.

    public function user()
    {
        return $this->morphOne('App\Models\User', 'profile');
    }

Edited.

i need to sort by specific user role.

0 likes
0 replies

Please or to participate in this conversation.