跨多个日期范围的Laravel搜索

ogq8wdun  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(84)

| 身份证|列表标识|开始日期|结束日期|
| - ------|- ------|- ------|- ------|
| 1个|1个|2023年1月20日|2023年1月25日|
| 第二章|1个|二〇二三年二月二十六日|2023年2月10日|
| 三个|1个|2023年2月11日|二〇二三年二月二十日|
| 四个|1个|二〇二三年二月二十一日|二〇二三年二月二十七日|

$listings->whereHas(
    'availabilityCalendar',
    function ($query) use ($start_date, $end_date) {
        $query->where('start_date', '>=', $start_date)
            ->where('end_date', '<=', $end_date);
    })
}

根据frontend发来的start_date = 2023-01-23/end_date = 2023-02-20取数,我发来的start_dateend_date值是我上面写的记录中的值。
如果我发送了start_date = 2023-01-01/end_date = 2023-02-20,它们将不会被包含。或者如果我提交了start_date = 2023-01-23/end_date = 2024-01-01,它们仍然不会被包含。
但是如果我发送日期start_date = 2023-02-01/end_date = 2023-02-15,它就会被满足。
你能帮忙吗?

uoifb46i

uoifb46i1#

您应该确保您查询转换为date。
你可以这样做

$startDate = Carbon::createFromFormat('Y-m-d', $start_date);
$endDate = Carbon::createFromFormat('Y-m-d',  $end_date);

$query->whereDate('start_date', '>=', $startDate )
    ->whereDate('end_date', '<=', $endDate );

$query->where(DB::raw('DATE(start_date)'), '>=', $startDate )
    ->where(DB::raw('DATE(end_date)'), '<=', $endDate );

相关问题