Как я могу искать состояние на основе ввода полного имени пользователя, когда я храню только код состояния? - PullRequest
0 голосов
/ 15 января 2020

У меня есть следующий запрос в красноречивом виде.

$profiles = Profile::where('full_name','LIKE','%'.$query.'%')->orWhere('area_description','LIKE','%'.$query.'%')->orWhere('state','LIKE','%'.$query.'%')->paginate(10);

, который просто отлично ищет на основе кода состояния, если вы предоставляете что-то вроде CA, OH, NJ и т. Д. c ...

Но для этого запроса необходимо иметь возможность получить полное имя штата в качестве входных данных, например, Калифорния, Огайо, Нью-Джерси и др. c ...

Я не сохраняю полное состояние имя в базе данных, однако. Можно ли как-то жестко закодировать таблицу переходов в приложении? Я действительно предпочел бы не вносить изменения в структуру базы данных на данном этапе проекта.

Ответы [ 2 ]

1 голос
/ 15 января 2020

Учитывая, что у вас есть массив кода состояния и имени состояния:

$data = [
  'AL' => 'Alabama',
  'AK' => 'Alaska',
  'AZ' => 'Arizona',
  'CA' => 'California',
  'CO' => 'Colorado'
];

Ввод пользователя

$query = 'ala'; 

Таким образом, пользовательский поиск 'ala' должен получить два состояния. сначала найдите весь код состояния, связанный с поиском:

$result = array_filter($data, function ($item) use ($query) {
    if (stripos($item, $query) !== false) {
        return true;
    }
    return false;
});

$state_codes =array_keys($result);

$state_codes имеет весь код состояния, связанный с поиском, и теперь вы можете использовать в запросе:

$profiles = Profile::where('full_name','LIKE','%'.$query.'%')
->orWhere('area_description','LIKE','%'.$query.'%')
->orWhereIn('state',$state_codes)
->paginate(10);
1 голос
/ 15 января 2020

Вы можете сохранить полное имя штата в конфигурации вашего приложения, если хотите, например, я сохраняю полное имя в state.php в папке конфигурации следующим образом:

return [
    'CA' => 'California,
]

тогда я могу Поиск полного имени по коду ключа, например:

$stateFullname = config('state');

$stateFullname[$profile->state];

Подробнее на здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...