May 19, 2020
0
Level 13
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.
Please or to participate in this conversation.