我想在Laravel上根据“关键字”或“经验”或“位置”编写搜索查询,如果存在任何这些变量,则应运行搜索查询。
我正在进行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)
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'));
一些意见/建议: