Manjunath
Manjunath

Reputation: 115

Filter record using from date and to date

In my case, I have to filter records by using from-date and to-date ,

I have tired with where between But it works only if I enter both from-date and to-date

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);
}

But sometimes I just want to search with only from-date, and sometimes I want to search with only to-date, and sometimes I want to search with both from date and to-date,

How can I get above output??

Upvotes: 1

Views: 223

Answers (5)

AddWeb Solution Pvt Ltd
AddWeb Solution Pvt Ltd

Reputation: 21691

You should try this:

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);
}

Upvotes: 0

Nikita
Nikita

Reputation: 437

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);
}

Upvotes: 1

Javi Stolz
Javi Stolz

Reputation: 4753

Try this

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);
}

Upvotes: 0

Naincy
Naincy

Reputation: 2943

............

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);

Upvotes: 0

ollieread
ollieread

Reputation: 6301

You'll need to add a bit more logic in. I'm assuming that you'll only want to search for the ones available.

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);
}

Upvotes: 0

Related Questions