Выберите DISTINCT, GROUP BY, HAVING count(*) в Laravel
У меня есть следующий объем:
public function scopeFilterByAmenities($query, AmenityFilters $amenities)
{
$ids = DB::table('property_amenities')->distinct()
->where(function($query) use ($amenities){
$query->whereIn('amenity_id', $amenities->ids_enabled());
$query->where('status', $amenities->enabled_value);
})
->orWhere(function($query) use ($amenities){
$query->whereIn('amenity_id', $amenities->ids_disabled());
$query->where('status', $amenities->disabled_value);
})
->groupBy('property_id')
->havingRaw('count(*) = '.$amenities->count()) // sum of $amenities->ids_enabled() and $amenities->ids_disabled()
->pluck('property_id');
return $query->whereIn('id', $ids);
}
Не должно ли быть проще, используя Laravel ORM для возврата тех же результатов? Мне удалось сделать это таким образом, но с моей точки зрения это выглядит беспорядочно, так что в Laravel есть что-то встроенное, так что можно сделать вещи более понятными?