Попробуйте использовать GROUP_CONCAT:
$vacancies = Vacancy::where('tag_category_id', $TagCatId)
->select(DB::raw('GROUP_CONCAT(id) AS IDs','position', DB::raw('count(*) as total'))
->groupBy('position')
->get();
Это даст вам разделенный запятыми список идентификаторов для каждой позиции
Я запустил это в своей таблице пользователей, поэтому игнорируйте имена столбцов, но вы получите результат в следующем формате:
Мой запрос:
Users::select(DB::raw('GROUP_CONCAT(id) AS IDs'), DB::raw('count(*) as Total'), 'team_id')
->groupBy('team_id')
->get();
Мой вывод:
App\Users {#3297
IDs: "9,69,70,72,73",
Total: 5,
team_id: 11,
},