使用起始日期和截止日期过滤记录

Filter record using from date and to date

就我而言,我必须使用起始日期和截止日期来过滤记录,

我已经厌倦了 where between 但只有当我同时输入起始日期和截止日期时它才有效

public function searchCustomers(Request $request, CustomerProfile $user)
{
    $fromDate = $request->get('from_date');
    $toDate = $request->get('to_date');
    $user = $user->newQuery();

    if ($request->has('city')) {
        $user->where('city', $request->input('city'));
    }

    if ($request->has('from_date') && $request->has('to_date')) {
        $user->whereBetween('date_of_visit', [$fromDate, $toDate]);
    }
    $results = $user->get();

    return response()->json($results);
}

但有时我只想搜索起始日期,有时我只想搜索截止日期,有时我想同时搜索起始日期和截止日期,

如何获得以上输出??

您需要添加更多逻辑。我假设您只想搜索可用的逻辑。

if ($fromDate && $toDate) {
    $user->whereBetween('date_of_visit', [$fromDate, $toDate]);
} else if ($fromDate) {
    $user->where('date_of_visit', '>=', $fromDate);
} else if ($toDate) {
    $user->where('date_of_visit', '<=', $toDate);
}
............

if($fromDate && $toDate) {
    $user->whereBetween('date_of_visit', [$fromDate, $toDate]);
} else if($fromDate) {
    $user->whereDate('date_of_visit', '>=', $fromDate);
} else if($toDate) {
    $user->whereDate('date_of_visit', '<=', $toDate);
}
$results = $user->get();

return response()->json($results);

试试这个

public function searchCustomers(Request $request, CustomerProfile $user)
{
    $user = $user->newQuery();

    if ($request->has('city')) {
        $user->where('city', $request->input('city'));
    }

    if ($request->has('from_date')) {
        $user->where('date_of_visit', '>=', $request->get('from_date'));
    }

    if ($request->has('to_date')) {
        $user->where('date_of_visit', '<=', $request->get('to_date'));
    }

    $results = $user->get();

    return response()->json($results);
}
if (isset($fromDate) && isset($toDate)) {
    $user->whereBetween('date_of_visit', array($fromDate, $toDate));
} else if (isset($fromDate)) {
    $user->where('date_of_visit', '>=', $fromDate);
} else if (isset($toDate)) {
    $user->where('date_of_visit', '<=', $toDate);
}

你应该试试这个:

public function searchCustomers(Request $request, CustomerProfile $user)
{
    $fromDate = $request->get('from_date');
    $toDate = $request->get('to_date');
    $user = $user->newQuery();

    if ($request->has('city')) {
        $user->where('city', $request->input('city'));
    }

    if (!empty($fromDate) && !empty($toDate)) {
        $user->whereBetween('date_of_visit', [$fromDate, $toDate]);
    } else if(!empty($fromDate)){
        $user->where('date_of_visit', '>=', $fromDate);
    } else {
        $user->where('date_of_visit', '<=', $toDate);
    }
    $results = $user->get();

    return response()->json($results);
}