Reputation: 115
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
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
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
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
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
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