I have a search form where I take several parameters and I return the results narrowed down. However, I don’t get how I can chain the requests properly.
Like, I can’t put Candidate::all() to have all the values and narrow them down since it’s a collection. How can I make sure that my request will follow from the past request?
Here’s is my request (only the first parameter).
So, how can I chain them properly?
JavaScript
x
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index(Request $request)
{
$candidates = Candidate::all();
$data = [];
$data['availabilities'] = Availability::all();
$data['job_types'] = JobType::all();
$data['fields_of_work'] = FieldOfWork::all();
$data['interests'] = Interest::all();
$data['salary'] = Salary::all();
$data['trainings'] = Training::all();
if($request->availaibilities && $request->availabilities !== -1) {
$candidates = Candidate::whereHas('availabilities', function ($query) use ($request) {
$query->where('availabilities.id', $request->field);
});
}
return view('admin.candidates.index')->with('candidates', $candidates->get())->with('data', $data)->with('request', $request);
}
Advertisement
Answer
You can add conditions on the query builder instance from Candidate::query()
JavaScript
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index(Request $request)
{
$candidates = Candidate::query();
$data = [];
$data['availabilities'] = Availability::all();
$data['job_types'] = JobType::all();
$data['fields_of_work'] = FieldOfWork::all();
$data['interests'] = Interest::all();
$data['salary'] = Salary::all();
$data['trainings'] = Training::all();
if ($request->availaibilities && $request->availabilities !== -1 && $request->field) {
$candidates->whereHas('availabilities', function ($query) use ($request) {
$query->where('availabilities.id', $request->field);
});
}
if ($request->secondParameter) {
$candidates->where('secondParameter', $request->secondParameter);
}
// and so on
return view('admin.candidates.index')->with('candidates', $candidates->get())->with('data', $data)->with('request', $request);
}