CityService.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Services;
  3. use App\City;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Support\Str;
  6. use App\Traits\ServiceAppAop;
  7. class CityService
  8. {
  9. use ServiceAppAop;
  10. protected $modelClass=City::class;
  11. public static $cities = ['汕头','汕尾'];
  12. /*
  13. * array | string $column
  14. * 默认一些select字段,可传递string 或 array来指定select字段
  15. */
  16. public function getSelection($column = ['id','name']){
  17. if (!is_array($column)) {
  18. $column = [$column];
  19. }
  20. return City::query()->select($column)->get();
  21. }
  22. public function find($id){
  23. return City::query()->find($id);
  24. }
  25. public function findByName($name)
  26. {
  27. $city = City::query()->where('name',$name)->first();
  28. if(isset($city))return $city;
  29. if(!$name)return null;
  30. foreach (CityService::$cities as $city) {
  31. if(strstr($city,$name) != null || strstr($name,$city)){
  32. return City::query()->where('name','like',$city.'%')->first();
  33. }
  34. }
  35. if(str_ends_with($name,'自治州')){
  36. $city_name = Str::before($name,'自治州');
  37. return City::query()->where('name','like',$city_name.'%')->first();
  38. }
  39. if(str_ends_with($name,'市')){
  40. $city_name = Str::before($name,'市');
  41. return City::query()->where('name','like',$city_name.'%')->first();
  42. }
  43. return null;
  44. }
  45. /**
  46. * 根据名称获取城市
  47. *
  48. * @param string|null $name
  49. *
  50. * @return Model|null
  51. */
  52. public function getCity(?string $name = null):?Model
  53. {
  54. if (!$name)return null;
  55. $cityName = mb_substr($name,0,3);
  56. return app(CacheService::class)->getOrExecute("city_".$cityName,function ()use($cityName){
  57. return City::query()->where("name","like",$cityName."%")->first();
  58. },86400);
  59. }
  60. }