Выберите 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 есть что-то встроенное, так что можно сделать вещи более понятными?

0 ответов

Другие вопросы по тегам