如何使用Laravel Fluent对每个ID(用户)计数列并使用WHERE条件?

时间:2018-07-22 05:12:41

标签: php sql eloquent laravel-5.5

我是laravel的新手。我想用'ket'列中的where条件计算数字。在此代码中,我已经成功地将代码应用于普通用户(代码1),我想将代码1 $total_tdkmsk $total_msk $total_telat应用于代码2。所以这就是我所做的。

Database Structure

Laravel流利查询

$id_alias = Auth::user()->id;
$tdkmsk = 'Tidak Masuk';
$msk = 'Masuk';
$total_tdkmsk = DB::table('presensi')
                    -> where('presensi.ket','=',$tdkmsk)
                    -> where('presensi.id_user','=',$id_alias)
                    -> count();
$total_msk = DB::table('presensi')
                    -> where('presensi.ket','=',$msk)
                    -> where('presensi.id_user','=',$id_alias)
                    -> count();
$total_telat = DB::table('presensi')
                    -> where('presensi.id_user','=',$id_alias)
                    -> sum('ketidakhadiran');

进入此查询

$items = DB::table('presensi')
            ->join('jabatan', 'presensi.id_user', '=', 'jabatan.id')
            ->join('users', 'presensi.id_user', '=', 'users.id')
            ->join('jadwal', 'presensi.jadwal', '=', 'jadwal.id')
            ->join('matakuliah', 'jadwal.id', '=', 'matakuliah.id')
            ->join('mahasiswakelas', 'jadwal.id_kelas', '=', 'mahasiswakelas.id_kelas')
            ->join('kelas', 'mahasiswakelas.id_kelas', '=', 'kelas.id')
            ->select('users.id AS id_users','users.name AS nama_users' ,'presensi.id AS id','jabatan.id AS id_jabatan','presensi.*', 'matakuliah.namamatakuliah','jabatan.nama_jabatan','kelas.nama_kelas','mahasiswakelas.tahunakademik',DB::raw('COUNT(*) as tidakada'))
            -> where('presensi.ket','=',$tdkmsk)
            ->orderby('presensi.id', 'DESC')
            ->groupby('presensi.id_user')
            ->get();

我得到结果,但这不是我所期望的。有什么建议吗?非常感谢你

1 个答案:

答案 0 :(得分:0)

要实现您在下面描述的内容,可以执行以下操作-

您应该在数据库中有一个字段,该字段指定哪个用户具有管理员权限,哪个用户是普通用户。

  1. 检查登录用户是否为管理员。
  2. 如果他是管理员,则获取所有用户的数据。

    if($checked){
      //fetch the data of all normal users.
    }
    

在您的控制器中

$query = DB::table('users')->where([
  ['role', '=', 'admin'],  // you should have a role field in the database.
  ['user_id', '=', $id_alias],
])->get();

if($query){
  $total_tdkmsk = DB::table('presensi')
                -> where('presensi.ket','=',$tdkmsk)
                -> count();
  $total_msk = DB::table('presensi')
                -> where('presensi.ket','=',$msk)
                -> count();
  $total_telat = DB::table('presensi')
                -> where('presensi.id_user','=',$id_alias)
                -> sum('ketidakhadiran');
}

根据您的数据库设计编辑表名称。我也不确定这里的if语句中编写的代码。因此,请自行检查和调试。

另外,由于您想获取所有用户的信息,因此不应在where子句中传递user_id,因为您没有将所有用户的用户ID存储在变量中。