Laravel 1 查询多个不同结果

问题描述 投票:0回答:1
我在1个请求中获取多个条件的总数据时遇到问题,所以我指的数据有

status,即ranap

ralan
,我想在其中计算所有数据、ralan数据和ranap数据的总计。但在最后一次查询运行中它肯定会产生 0 值。

在我的例子中

ralan总是得到值0,因为它是上次执行的。当我尝试查看查询时,我发现最后一个查询有 2 个 where 状态,而在我的数据中只有 1 个状态,即 ralan 和 ranap 之间,其中之一。

这是我的代码,

$msg = "Data detail pemberian obat"; $data = \App\Models\DetailPemberianObat::select('tgl_perawatan', 'jam', 'no_rawat'); if ($request->bulan) { $msg .= " bulan {$request->bulan}"; $data = $data->whereMonth('tgl_perawatan', $request->bulan)->whereYear('tgl_perawatan', date('Y')); } else { $msg .= " bulan ini "; $data = $data->whereMonth('tgl_perawatan', date('m'))->whereYear('tgl_perawatan', date('Y')); } $all = $data->count(); $ranap = $data->where('status', 'Ranap')->count(); $ralan = $data->where('status', 'Ralan')->count(); $msg .= " berhasil diambil"; return isSuccess([ 'all' => $all, 'ranap' => $ranap, 'ralan' => $ralan, ], $msg);
这就是我得到的结果

{ "success": true, "message": "Data detail pemberian obat bulan ini berhasil diambil", "data": { "all": 32589, "ranap": 21136, "ralan": 0 } }
以下是我在查看 ranal 变量的查询时得到的查询,最后一个对数据库运行查询。

"select `tgl_perawatan`, `jam`, `no_rawat` from `detail_pemberian_obat` where month(`tgl_perawatan`) = ? and year(`tgl_perawatan`) = ? and `status` = ? and `status` = ?"
实际上,这个问题可以通过创建 2 个不同的变量来运行数据库查询来解决,例如 data 和 data2。但因为我认为仅使用 1 个变量,我的代码会更简洁且更易于阅读。然而,如果这是不可能的,那就是我现在可以应用和想到的唯一方法。

也许还有一件事, 如果总数据是1000个,其中数据是500个,那么另外500个可以说是准确的数据,但是我对使用这个方法很怀疑。

laravel eloquent query-optimization
1个回答
0
投票
原因是 Laravel 的查询构建器是可变的。当您调用

$data->where('status', 'Ranap')->count()

 时,您正在修改原始 
$data
 查询。

你可以试试这个:

$msg = "Data detail pemberian obat"; $data = \App\Models\DetailPemberianObat::select('tgl_perawatan', 'jam', 'no_rawat'); if ($request->bulan) { $msg .= " bulan {$request->bulan}"; $data = $data->whereMonth('tgl_perawatan', $request->bulan)->whereYear('tgl_perawatan', date('Y')); } else { $msg .= " bulan ini "; $data = $data->whereMonth('tgl_perawatan', date('m'))->whereYear('tgl_perawatan', date('Y')); } $all = $data->count(); $ranap = (clone $data)->where('status', 'Ranap')->count(); $ralan = (clone $data)->where('status', 'Ralan')->count(); $msg .= " berhasil diambil"; return isSuccess([ 'all' => $all, 'ranap' => $ranap, 'ralan' => $ralan, ], $msg);
    
© www.soinside.com 2019 - 2024. All rights reserved.