在laravel中编写一个函数

时间:2017-08-04 15:53:43

标签: php laravel function laravel-5.3 laravel-query-builder

我有以下功能从数据库中获取与作业相关的一些数据。用户可以搜索具有职位/关键字,城市和/或类别的职位。用户可以选择一个选项,例如仅按标题或类别搜索作业。或者他可以使用所有选项进行深度搜索。以下是我的功能:

public function jobsearch(Request $request)
    {
        $keyword = htmlspecialchars($request->input('keyword'));
        $city_id = $request->input('city_id');
        $category_id = $request->input('category_id');

        if($keyword !== '' && $city_id != 0 && $category_id == 0)
        {
        $data = DB::table('job_details')->where('job_title', 'like', '%'.$keyword.'%')->where('city_id', $city_id)->get();
        } 
        elseif($keyword !== '' && $city_id == 0 && $category_id != 0) 
        {
        $data = DB::table('job_details')->where('job_title', 'like', '%'.$keyword.'%')->where('category_id', $category_id)->get();
        } 
        elseif($keyword == '' && $city_id != 0 && $category_id != 0)
        {
        $data = DB::table('job_details')->where('category_id', $category_id)->where('city_id', $city_id)->get();
        }
        elseif($keyword !== '' && $city_id == 0 && $category_id == 0)
        {
        $data = DB::table('job_details')->where('job_title', 'like', '%'.$keyword.'%')->get();
        }
        elseif($keyword == '' && $city_id == 0 && $category_id != 0)
        {
        $data = DB::table('job_details')->where('category_id', $category_id)->get();
        }
        elseif($keyword == '' && $city_id != 0 && $category_id == 0)
        {
        $data = DB::table('job_details')->where('city_id', $city_id)->get();
        }
        else
        {
        $data = DB::table('job_details')->where('job_title', 'like', '%'.$keyword.'%')->where('category_id', $category_id)->where('city_id', $city_id)->get();
        }

        foreach($data as $data)
        {
            echo $data->job_title.'<br>';
        }

    } 

正如你所看到的那样,函数对于许多if和elseif语句来说太乱了。我的问题是,是否有任何方法以干净的方式编写给定的函数?你会如何用自己的风格编写给定的函数?请帮助。

1 个答案:

答案 0 :(得分:2)

您真的错过了Laravel查询构建器的最佳部分。

public function jobsearch(Request $request) {
    // htmlspecialchars makes no sense here
    $keyword = $request->input('keyword');
    $city_id = $request->input('city_id');
    $category_id = $request->input('category_id');

    $query = DB::table('job_details');

    if($keyword) {
        $query->where('job_title', 'like', '%'.$keyword.'%');
    }

    if($city_id) {
        $query->where('city_id', $city_id);
    }

    if($category_id) {
        $query->where('category_id', $category_id);
    }

    $results = $query->get();

    foreach($data as $data) { ... }
}