代码之家  ›  专栏  ›  技术社区  ›  HALIM

Laravel 1查询多个不同的结果

  •  0
  • HALIM  · 技术社区  · 1 年前

    我在一个请求中获取具有多个条件的总数据时遇到问题,所以我所说的数据有 地位 ranap ralan ,其中我想计算所有数据的总和,ralan数据和ranap数据。但它在最后一次查询运行中肯定会产生一个值0。

    就我而言 ralan总是得到值0,因为它是上次执行的 。当我尝试查看查询时,我发现 上一个查询有2个where状态 ,而在我的数据中,只有一种状态,即在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变量的查询时得到的查询,ranal变量是最后一个对数据库运行查询的变量。

    "select `tgl_perawatan`, `jam`, `no_rawat` from `detail_pemberian_obat` where month(`tgl_perawatan`) = ? and year(`tgl_perawatan`) = ? and `status` = ? and `status` = ?"
    

    实际上,这个问题可以通过创建两个不同的变量来解决,比如data和data2。但因为我认为只使用1个变量,我的代码更简洁,更容易阅读。然而,如果这不可能,这是我目前唯一可以应用和想到的方法。

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

    0 回复  |  直到 1 年前
        1
  •  0
  •   Jeyhun Rashidov    1 年前

    原因是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);