当我只存储州代码时,如何根据用户的全名输入搜索状态?



我有以下查询。

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

如果您提供 CA、OH、NJ 等内容,则根据州代码进行搜索就可以了......

但是它需要这个查询需要能够接收完整的州名作为输入,例如加利福尼亚州、俄亥俄州、新泽西州等......

但是,我没有将完整的状态名称存储在数据库中。有什么方法可以在应用程序中对人行横道表进行硬编码吗?我真的不希望在项目的这一点上进行数据库结构更改。

考虑到您有一个状态代码和状态名称数组:

$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);

如果需要,您可以将状态全名存储在应用程序配置中,例如,我将全名存储在 config 文件夹中的state.php中,如下所示:

return [
'CA' => 'California,
]

然后我可以通过键代码搜索全名,如下所示:

$stateFullname = config('state');
$stateFullname[$profile->state];

在此处阅读更多内容

最新更新