为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
守着星空守着你 2022-07-22 10:49:32
我有以下雄辩的查询。$profiles = Profile::where('full_name','LIKE','%'.$query.'%')->orWhere('area_description','LIKE','%'.$query.'%')->orWhere('state','LIKE','%'.$query.'%')->paginate(10);如果您提供 CA、OH、NJ 等内容,则根据州代码进行哪些搜索就好了……但它需要这个查询需要能够接收完整的州名作为输入,例如加利福尼亚、俄亥俄、新泽西等......但是,我没有将完整的州名存储在数据库中。有什么方法可以在应用程序中硬编码人行横道表吗?我真的不希望在项目中此时不必更改数据库结构。
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

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


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


查看完整回答
反对 回复 2022-07-22
?
青春有我

TA贡献1784条经验 获得超8个赞

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


return [

    'CA' => 'California,

]

然后我可以通过这样的键码搜索全名:


$stateFullname = config('state');


$stateFullname[$profile->state];

在这里阅读更多


查看完整回答
反对 回复 2022-07-22
  • 2 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信