在laravel中写一个函数 [英] Writing a function in laravel

查看:110
本文介绍了在laravel中写一个函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

pre $ public function jobsearch(Request $ request)
{
$ keyword = htmlspecialchars ($请求 - >输入( '关键字'));
$ city_id = $ request-> input('city_id');
$ category_id = $ request-> input('category_id');
$ b $ if 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 (''category_id',$ category_id) - > get():''''''''('job_details') - >其中('job_title','like','%'。$ keyword。'%') - & ;

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&& $ amp; $ 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();


{
$ 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语句太杂乱了。我的问题是,如果有什么方法可以用干净的方式编写给定的函数?你会如何在你的风格中编写给定的功能?请帮助。

解决方案

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

  public function jobsearch(Request $ request){
// htmlspecialchars在这里没有意义
$ keyword = $ request-> input ('关键词');
$ 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){...}
}


I have the following function which fetch some data related to jobs from database. The user can search for jobs with job title / keyword, city and/or category. The user can either choose one option, e.g. searching jobs only by title, or by category. or he can use all options for deep search. Below is my function:

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>';
        }

    } 

As you can see the function is too much messy with many if and elseif statements. My question is if there is any way to write the given function in clean way? How would you write the given function in your style? Please Help.

解决方案

You're really missing out on the best parts of Laravel's query builder.

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) { ... }
}

这篇关于在laravel中写一个函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆