У меня есть запрос с фильтрацией.Во многих полях есть оператор 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();
Если я теперь запрашиваюодна работа, все работает.Но если я запрашиваю несколько вакансий, я ничего не получаю.Это потому, что я ищу вакансию с несколькими рабочими отношениями, но это отношение oneToMany.Если я использую orWhere
, фильтрация не работает.Как я могу добиться, чтобы я получал вакансии от нескольких вакансий, но другой фильтр все еще применяется?