如何计算列并使用 Laravel 流利的每个 ID(用户)的 WHERE 条件?
How to COUNT Column and use WHERE condition by each ID(user) with Laravel Fluent?
我是 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();
我得到了结果,但这不是我所期望的。对此有何建议?非常感谢
为了实现您在下面描述的内容,您可以执行以下操作-
您的数据库中应该有一个字段,指定哪个用户具有管理员权限,哪个用户是普通用户。
- 检查登录用户是否为管理员。
如果他是管理员,获取所有用户的数据。
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');
}
根据您的数据库设计编辑 table 名称。此外,我不确定此处 if 语句中编写的代码。所以自己检查调试。
此外,由于您要获取所有用户的信息,因此不应在 where 子句中传递 user_id,因为您没有将所有用户的用户 ID 存储在变量中。
我是 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();
我得到了结果,但这不是我所期望的。对此有何建议?非常感谢
为了实现您在下面描述的内容,您可以执行以下操作-
您的数据库中应该有一个字段,指定哪个用户具有管理员权限,哪个用户是普通用户。
- 检查登录用户是否为管理员。
如果他是管理员,获取所有用户的数据。
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');
}
根据您的数据库设计编辑 table 名称。此外,我不确定此处 if 语句中编写的代码。所以自己检查调试。
此外,由于您要获取所有用户的信息,因此不应在 where 子句中传递 user_id,因为您没有将所有用户的用户 ID 存储在变量中。