You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用whereBetween查询同日数据无结果的技术求助

问题解决:单日数据查询失败的修复

问题出在**whereBetween的日期范围匹配逻辑**上:如果你的pengeluaran.tanggal字段是datetime/timestamp类型(包含时分秒),当你传入相同的日期字符串(比如07-12-2022),Laravel会默认把它解析为当天的00:00:00,此时whereBetween的范围是07-12-2022 00:00:00到07-12-2022 00:00:00,自然查不到当天带时分秒的数据。

下面是两种可行的修复方案:


方案1:扩展结束日期到当天23:59:59

利用Carbon处理日期,把结束日期设置为当天的最后一秒,确保覆盖全天的时间范围:

$request->validate(
    [
        'tanggal_awal' => 'required|date',
        'tanggal_akhir' => 'required|date'
    ],
    [
        'tanggal_awal.required' => 'Tanggal awal tidak boleh kosong!',
        'tanggal_akhir.required' => 'Tanggal akhir tidak boleh kosong!',
        'tanggal_awal.date' => 'Tanggal awal harus berformat tanggal yang valid!',
        'tanggal_akhir.date' => 'Tanggal akhir harus berformat tanggal yang valid!',
    ]
);

// 用Carbon解析日期,确保格式正确
$tanggal_awal = \Carbon\Carbon::createFromFormat('d-m-Y', $request->tanggal_awal)->startOfDay();
$tanggal_akhir = \Carbon\Carbon::createFromFormat('d-m-Y', $request->tanggal_akhir)->endOfDay();

if ($tanggal_awal && $tanggal_akhir) {
   $pengeluaran = Pengeluaran::whereBetween('tanggal', [$tanggal_awal, $tanggal_akhir])->get();
   $totalpengeluaran = Pengeluaran::whereBetween('tanggal', [$tanggal_awal, $tanggal_akhir])->sum('jumlah');
} else {
    $pengeluaran = Pengeluaran::latest()->get();
    $totalpengeluaran = Pengeluaran::sum('jumlah'); // 补充默认情况的总金额
}

return view('pengeluaran.cetak_pengeluaran', compact('pengeluaran', 'totalpengeluaran', 'tanggal_awal', 'tanggal_akhir'));

说明:

  • 给验证规则加上date,确保传入的是合法日期
  • 用createFromFormat指定日期格式(你的参数是d-m-Y格式:日-月-年)
  • startOfDay()把开始日期设为当天00:00:00,endOfDay()把结束日期设为当天23:59:59,覆盖全天数据

方案2:直接匹配日期部分(忽略时分秒)

如果只需要匹配日期,不管具体时间,可以用whereDate方法,直接对比日期部分:

$request->validate(
    [
        'tanggal_awal' => 'required|date',
        'tanggal_akhir' => 'required|date'
    ],
    [
        'tanggal_awal.required' => 'Tanggal awal tidak boleh kosong!',
        'tanggal_akhir.required' => 'Tanggal akhir tidak boleh kosong!',
        'tanggal_awal.date' => 'Tanggal awal harus berformat tanggal yang valid!',
        'tanggal_akhir.date' => 'Tanggal akhir harus berformat tanggal yang valid!',
    ]
);

$tanggal_awal = \Carbon\Carbon::createFromFormat('d-m-Y', $request->tanggal_awal)->toDateString();
$tanggal_akhir = \Carbon\Carbon::createFromFormat('d-m-Y', $request->tanggal_akhir)->toDateString();

if ($tanggal_awal && $tanggal_akhir) {
    // 当开始和结束日期相同时,直接用whereDate
    if ($tanggal_awal === $tanggal_akhir) {
        $pengeluaran = Pengeluaran::whereDate('tanggal', $tanggal_awal)->get();
        $totalpengeluaran = Pengeluaran::whereDate('tanggal', $tanggal_awal)->sum('jumlah');
    } else {
        // 日期范围不同时,继续用whereBetween
        $pengeluaran = Pengeluaran::whereBetween('tanggal', [$tanggal_awal, $tanggal_akhir])->get();
        $totalpengeluaran = Pengeluaran::whereBetween('tanggal', [$tanggal_awal, $tanggal_akhir])->sum('jumlah');
    }
} else {
    $pengeluaran = Pengeluaran::latest()->get();
    $totalpengeluaran = Pengeluaran::sum('jumlah');
}

return view('pengeluaran.cetak_pengeluaran', compact('pengeluaran', 'totalpengeluaran', 'tanggal_awal', 'tanggal_akhir'));

说明:

  • whereDate会自动忽略tanggal字段的时分秒部分,只对比日期,适合单日查询场景
  • 增加了日期相同的判断,优化查询逻辑

内容的提问来源于stack exchange,提问作者Arya Rizky Sandi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:50:24