Вам нужно будет использовать group by, он группирует все результаты по заданному столбцу. Вам также нужно будет сделать конкретный выбор, это агрегирует данные по заданным строкам со всеми строками с одинаковым id_jadwal
, где вы затем можете считать, суммировать и т. Д. Сопоставили все идентификаторы с переменной, чтобы использовать whereIn , чтобы имитировать, как вы сделали цикл foreach.
$jadwals = array_map(function($row) { return $row->id; }, $kelas);
$hitung = \DB::table('khs')
->whereIn('id_jadwal', $jadwals)
->groupBy('id_jadwal')
->select('id_jadwal', DB::raw('COUNT(id_jadwal) as quantity'));
Это должно дать результаты, которые вы предложили. Если у вас есть какие-либо вопросы или выравнивания, пожалуйста, напишите, это было довольно трудно понять из-за именования иностранных языков.
id_jadwal quantity
-------------------------------
100 6
-------------------------------
150 3
-------------------------------