2017-01-16 62 views
0

如果存在这些变量中的任何一个,我想基于“keyword”或“experience”或“location”搜索查询在Laravel上编写搜索查询。基于laravel中是否存在post变量的搜索查询

我调用Ajax实现这一

jobsController.php

public function homepageSearch() { 
    $_POST = json_decode(file_get_contents('php://input'), true); 
    $jobs = Jobs::latest('created_at')->search()->get(); 
    echo $jobs; 
} 

型号jobs.php

class Jobs extends Model { 
    public function scopeSearch($query) { 
     $query->where('job_title', 'like', '%'.$_POST['keyword'].'%') 
       ->orWhere('job_description', 'like', '%'.$_POST['keyword'].'%'); 

     if(isset($_POST['keyword'])) { 
      $query->where('job_title', 'like', '%'.$_POST['keyword'].'%') 
        ->orWhere('job_description', 'like', '%'.$_POST['keyword'].'%'); 
     } 

     if(isset($_POST['experience'])) { 
      $query->where('min_exp', $_POST['experience']) 
        ->orWhere('max_exp', $_POST['experience']); 
     } 

     if(isset($_POST['city'])) { 
      $query->where('job_location','like','%'.$_POST['city'].'%'); 
     } 
    } 
} 

我想关键字或城市的基础上,搜索或经验是在laravel中实现这一点的正确方法?

我是Laravel的新手。你能用这个建议我吗?从你的控制器使用以下

+0

当然它会抛出错误。 1它不是一个好的方法来使用2.因为你已经修复了不应该是空的键,如果它是空的,它会抛出错误3.如果这是空的什么基础上搜索将工作? –

+0

它应该根据关键字或经验或城市进行搜索。如果在搜索过程中使用isset($ _ POST ['keyword']),则会删除错误。您可以建议我以更好的方式实现此目的。提前感谢。 –

+0

在if条件 –

回答

1
class Job extends Model { 
    public function scopeSearch($query, $keyword, $experience, $city) { 
     $query->where(function ($q) { 
      $q->where('job_title', 'like', '%'.$_POST['keyword'].'%') 
       ->orWhere('job_description', 'like', '%'.$_POST['keyword'].'%'); 
     }); 

     if(isset($keyword)) { 
      $query->where(function ($q) { 
       $q->where('job_title', 'like', '%'.$_POST['keyword'].'%') 
        ->orWhere('job_description', 'like', '%'.$_POST['keyword'].'%'); 
      }); 
     } 

     if(isset($experience)) { 
      $query->where(function($q) { 
       $q->where('min_exp', $_POST['experience']) 
        ->orWhere('max_exp', $_POST['experience']); 
      }); 
     } 

     if(isset($city)) { 
      $query->where('job_location','like','%'.$_POST['city'].'%'); 
     } 

    return $query; 
    } 
} 

电话:

Job::search($request->input('keyword'), 
$request->input('experience'), $request->input('city')); 

一些意见/建议:

  1. 哪里链需求是正确的。当你说$ query-> where(.. a ..) - > orWhere(.. b ..) - > where(.. c ..) - > orWhere(.. d ..)它将评估为: ((a & & c)|| b || d)。你想在哪里((a || b)& &(c || d))。这就是为什么你需要使用上面使用使用$ _ POST parameter grouping
  2. 避开封闭路段像我有,使用Request对象,而不是作为Laravel做了很多工作,为您在使用$请求
  3. 避免调用您的请求对象来自模型。检查请求/变量变量不是模型的责任,这是您的控制者的责任。使用dynamic scopes来代替职责
  4. 您需要返回范围内的查询对象
  5. 模型是一个实体。所以“工作”不是“工作”的模型。所以我把Jobs类改名为Job :)
+0

你已经说了我想说的,好工作! – Gayan

+0

太好了..非常感谢您的建议,请牢记这一切。 –