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

Posted

技术标签:

【中文标题】如何使用 Laravel Fluent 按每个 ID(用户)计算列并使用 WHERE 条件?【英文标题】:How to COUNT Column and use WHERE condition by each ID(user) with Laravel Fluent? 【发布时间】:2018-07-22 05:12:40 【问题描述】:

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

Database Structure

Laravel Fluent 查询

$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】:

为了实现您刚才描述的内容,您可以执行以下操作-

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

    检查登录用户是否为管理员。

    如果他是管理员,获取所有用户的数据。

    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。

【讨论】:

没错,我知道它是因为我将它用于普通用户,但我不知道什么变量可以让管理员看到每个普通用户的 $total_msk、$total_tdkmsk、$total_telat 您想让管理员访问普通用户的$total_msk, $total_tdkmsk, $total_telat 吗? yap 是正确的,然后我希望它显示在每个普通用户的 $total_msk、$total_tdkmsk、$total_telat 表的 1 个视图上 嗯,我已经完成了给出的解决方案。好的,也许我的问题不清楚,我已经编辑了我的问题

以上是关于如何使用 Laravel Fluent 按每个 ID(用户)计算列并使用 WHERE 条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 的 fluent 中进行子查询?

在 Laravel Fluent 中使用 Distinct

如何使用 Laravel 的流畅查询构建器混合原始 SQL 和非原始 SQL

Laravel Fluent 查询生成器加入子查询

使用自动映射时如何使用 Fluent NHibernate Validator?

使用 C# Fluent Aggregation Framework 的 MongoDB 异常