如何为 Laravel 搜索过滤器功能创建查询语句?

如何为 Laravel 搜索过滤器功能创建查询语句?我想将 Laravel 搜索查询合二为一。现在这段代码有问题。它不是多条件叠加。我想将此查询统一为一个并获得满足所有条件的结果。我应该怎么办?


//펜팔 메인 페이지

public function index (Request $request){

    //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 name search

     if (!empty($request->goal) && $request->goal !== 'all') {


        $penpals = $this->penpalModel->where('goal_id',$request->goal)->latest();

     }



    //age search

    if($request->ageMin || $request->ageMax){


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

    }





    $penpalsData = $penpals->orderBy('penpals.created_at','desc')->paginate(12);





    $penpalsCount = count($penpalsData);


    return view('penpal.index')->with([

        'penpals'       => $penpalsData,

        'penpalsCount'  => $penpalsCount

        ]);


}


元芳怎么了
浏览 159回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP