join('group_user', 'groups.id', '=', 'group_user.group_id') ->select('groups.*', DB::raw('count(group_user.user_id) as number_of_users')) ->groupBy('groups.id') ->orderBy('number_of_users'); return $query; } /** * @return int */ public function querySize(): int { return Group::has('users')->count(); } /** * @param Group $row * @return array */ public function map($row): array { return [ $row->id, $row->name, $row->number_of_users, ]; } }