шаблон проектирования для нескольких критериев поиска

У меня есть эта функция, которая ищет работу на основе предоставленных критериев поиска. Существует пять различных критериев поиска, которые могут быть соблюдены при поиске работы. Например: поиск может содержать только название компании или название компании, должность, отрасль и т. Д. Таким образом, они представляют собой множество различных комбинаций этих пяти вещей, которые можно искать. Моя проблема в том, что я не хочу вручную кодировать различные комбинации для поиска. Есть ли методология шаблонов программирования, которую я могу использовать для достижения этой цели. Это код у меня в настоящее время

  $app->post('/search', function () use ($app) {

// reading post params
$company = $app->request()->post('company');
$jobTitle = $app->request()->post('jobTitle');
$parish = $app->request()->post('parish');
$industry = $app->request()->post('industry');
$type = $app->request()->post('type');
$response = array();
$argsArray = array();
$result = '';

if ($company != NULL) {
$argsArray['company'] = $company;
}

if ($jobTitle != NULL) {
$argsArray['jobTitle'] = $jobTitle;
}
if ($parish != NULL) {
$argsArray['parish'] = $parish;
}
if ($industry != NULL) {
$argsArray['industry'] = $industry;
}
if ($type != NULL) {
$argsArray['type'] = $type;
}

$db = new DbHandler();

if (count($argsArray) == 0) {
$result = $db->search();
}
else if (count($argsArray) == 1) {
if (array_key_exists('company', $argsArray)) {
$result = $db->search($company);
}
else if (array_key_exists('jobTitle', $argsArray)) {
$result = $db->search($jobTitle);
}
else if (array_key_exists('parish', $argsArray)) {
$result = $db->search($parish);
}
else if (array_key_exists('industry', $argsArray)) {
$result = $db->search($industry);
}
else if (array_key_exists('type', $argsArray)) {
$result = $db->search($type);
}} else if (count($argsArray) == 2) {
if (array_key_exists('company', $argsArray) && array_key_exists('jobTitle', $argsArray)) {
$result = $db->search($company, $jobTitle);
}
else if (array_key_exists('parish', $argsArray) && array_key_exists('jobTitle', $argsArray)) {
$result = $db->search($jobTitle, $parish);
}
else if (array_key_exists('company', $argsArray) && array_key_exists('parish', $argsArray)) {
$result = $db->search($parish, $company);
}
else if (array_key_exists('company', $argsArray) && array_key_exists('industry', $argsArray)) {
$result = $db->search($industry, $company);
}
else if (array_key_exists('company', $argsArray) && array_key_exists('type', $argsArray)) {
$result = $db->search($type, $company);
}
else if (array_key_exists('industry', $argsArray) && array_key_exists('type', $argsArray)) {
$result = $db->search($industry, $type);
}
else if (array_key_exists('jobTitle', $argsArray) && array_key_exists('industry', $argsArray)) {
$result = $db->search($jobTitle, $industry);
}
else if (array_key_exists('parish', $argsArray) && array_key_exists('type', $argsArray)) {
$result = $db->search($parish, $type);
}
else if (array_key_exists('industry', $argsArray) && array_key_exists('parish', $argsArray)) {
$result = $db->search($industry, $parish);
}
else if (array_key_exists('type', $argsArray) && array_key_exists('jobTitle', $argsArray)) {
$result = $db->search($type, $jobTitle);
}
} else if (count($argsArray) == 3) {

} else if (count($argsArray) == 4) {

} else if (count($argsArray) == 5) {
$result = $db->search($type, $jobTitle, $parish, $industry, $company);
}

Как видите, если бы я делал это для пяти разных комбинаций, это было бы громоздко и не очень эффективно. Как я могу решить такие проблемы.

-2

Решение

Вы можете попробовать шаблон декоратора, если порядок не имеет значения, то есть поиск логичен «и» с остальными. С шаблоном это немного чище, но это зависит от данных.

0

Другие решения

Вот как я решил проблему, используя списки параметров переменной длины.

public function search(...$args)
{
//only searches for jobs that are open
$status = "open";
$wild_card = "%";
//Loops through the array of search variables
foreach ($args as $a) {

//checks if no search criteria was set if not it searches for all available jobs
if (count($a) == 0) {
return $this->noCriteria($status);
} //searches when one search criteria was set
else if (count($a) == 1) {
return $this->oneCriteria($status, $wild_card, $a);
} // searches jobs with two criteria set
else if (count($a) == 2) {
return $this->twoCriteria($status, $wild_card, $a);

} // searches jobs with THREE criteria set
else if (count($a) == 3) {

return $this->threeCriteria($status, $wild_card, $a);

} // searches jobs with four criteria set
else if (count($a) == 4) {

return $this->fourCriteria($status, $wild_card, $a);

} // searches jobs with five criteria set
else if (count($a) == 5) {

return $this->allCriteria($status, $wild_card, $a);

}
}
return NULL;
}
0

По вопросам рекламы [email protected]