我有一个过滤查询。很多字段都有一个where
语句,但是我也有多个选择,应该选择orWhere
。
我的查询如下:
$vacancies = Vacancie::select();
if($request->filled('jobs')) {
$vacancies->whereHas('jobTitle', function ($q) use ($request) {
foreach($request->jobs as $job) {
$q->where('id', clean($job));
}
});
}
$request->filled('title') ? $vacancies->orWhere('title', 'like', '%' . clean($request->title) . '%') : null;
$request->filled('company') ? $vacancies->orWhere('company', intval($request->company)) : null;
if($request->filled('companyName') || $request->filled('zip') || $request->filled('city')) {
$companyName = clean($request->companyName);
$zip = clean($request->zip);
$city = clean($request->city);
$vacancies->whereHas('company', function ($q) use ($companyName, $city, $zip) {
($city) ? $q->where('city', 'LIKE', '%' . $city . '%') : null;
($zip) ? $q->where('zip', 'LIKE', '%' . $zip . '%') : null;
($companyName) ? $q->where('title', 'LIKE', '%' . $companyName . '%') : null;
});
}
$vacancies->get()->toJson();
如果我现在查询一份工作,那么一切正常。但是,如果我要查询多个工作,我什么也得不到。那是因为我正在寻找具有多个工作关系的职位空缺,但这是一个一对多的关系。如果我使用orWhere
,则过滤不起作用。我该如何获得多个职位的职位空缺,但另一个过滤器仍然适用?