每个人都编写了一个代码来按性别、国籍、目的和年龄过滤搜索词,但这些应用程序都是单独运行的。我想让这个结果。我想知道如何同时应对各种情况。例如,如果一次听到性别和年龄,我必须返回结果,我想知道如何。我想在这里解决两件事。1.对所有搜索结果应用条件叠加 2.进入页面不搜索时,不打印列表
//base Object
$penpals = $this->penpalModel->getUsers();
//name search
if (!empty($request->name)) {
$users = $this->userModel->where('name', 'like', '%' . $request->name . '%')->get();
if (!empty($users)) {
$penpals->whereIn('user_id', $users);
}
}
//gender search
if (!empty($request->gender) && $request->gender !== 'all') {
$penpals->leftJoin('users', 'penpals.user_id', '=', 'users.id')
->select('penpals.*', 'users.gender')
->where('users.gender', $request->gender);
}
// country search
if (!empty($request->country) && $request->country !== 'all') {
$penpals->leftJoin('users', 'penpals.user_id', '=', 'users.id')
->select('penpals.*', 'users.country')
->where('users.country', $request->country);
}
// goal search
if (!empty($request->goal) && $request->goal !== 'all') {
$penpals = $this->penpalModel->where('goal_id',$request->goal)->latest();
}
//age search
if($request->ageMin != 1 || $request->ageMax != 100 ){
$ageMin = floor($request->ageMin);
$ageMax = floor($request->ageMax);
$penpals = $this->penpalModel->leftJoin('users', 'penpals.user_id', '=', 'users.id')
->select('penpals.*', 'users.age')
->whereBetween('users.age', [$ageMin, $ageMax])
->orderBy('penpals.created_at','desc');
}
//search result
$penpalsData = $penpals->orderBy('penpals.created_at','desc')->paginate(12);
$penpalsCount = count($penpalsData);
return view('penpal.index')->with([
'penpals' => $penpalsData,
'penpalsCount' => $penpalsCount
]);