我有一个过滤查询如下。
function DaftarMatakuliahKontrak() {
$tahun_akademik = \DB::table('tahun_akademik') - > where('status', 'y') - > first();
$kelas = \DB::table('khs') - > where('kode_tahun_akademik', $tahun_akademik - > kode_tahun_akademik) - > groupBy('id_jadwal', 'kode_mk') - > select('id_jadwal', 'kode_mk') - > get(); //Get id_jadwal
foreach($kelas as $row) {
$hitung = \DB::table('khs') - > where('id_jadwal', $row - > id_jadwal) - > select('id_jadwal') - > count(); //Count id_jadwal
}
dd($hitung);
}
现在我希望查询具有以下输出
id_jadwal quantity
-------------------------------
100 6
-------------------------------
150 3
-------------------------------
我的模特
class kelas extends Model
{
protected $table="khs";
protected $fillable=['kode_mk','id_jadwal','nidn'];
}
但是,仅显示1个数据量最大的数据
答案 0 :(得分:1)
您将需要使用分组依据,它将所有结果按给定列分组。您还必须进行特定选择,这将聚合给定行上的数据,所有行都具有相同的id_jadwal
,然后您就可以在其中进行计数,求和等操作。是否将所有ID映射到变量,利用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
-------------------------------