$queryWithParent = SaleService::query()     ->select(\DB::raw('DISTINCT ON (properties.parent_id) sale_services.*'))     ->from('sale_services')     ->join('properties', 'sale_services.property_id', '=', 'properties.id')     ->whereNotNull('properties.parent_id')     ->orderBy('properties.parent_id')     ->orderBy('sale_services.index_range', 'desc');  $queryWithoutParent = SaleService::query()     ->select(\DB::raw('sale_services.*'))     ->join('properties', 'sale_services.property_id', '=', 'properties.id')     ->whereNull('properties.parent_id');  $query = $queryWithParent->union($queryWithoutParent);

Read more of this post