SyncFootballDataService.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Services;
  3. use App\Services\BaseService;
  4. use App\Models\Timezone;
  5. use App\Models\Country;
  6. class SyncFootballDataService extends BaseService
  7. {
  8. // 同步时区数据
  9. public static function syncTimezone()
  10. {
  11. $result = app('api-football')->timezone();
  12. $response = $result['response'] ?? [];
  13. if (empty($response)) {
  14. return $result;
  15. }
  16. // 先将所有时区设为无效
  17. Timezone::query()->update(['status' => Timezone::STATUS_NO]);
  18. foreach ($response as $code) {
  19. // 使用 firstOrCreate 简化代码
  20. $timezone = Timezone::firstOrCreate(
  21. ['code' => $code],
  22. [
  23. 'code' => $code,
  24. 'status' => Timezone::STATUS_YES
  25. ]
  26. );
  27. // 如果已存在,更新状态
  28. if (!$timezone->wasRecentlyCreated) {
  29. $timezone->update(['status' => Timezone::STATUS_YES]);
  30. }
  31. }
  32. return $result;
  33. }
  34. // 同步国家/地区数据
  35. public static function syncCountry()
  36. {
  37. $result = app('api-football')->countries();
  38. $response = $result['response'] ?? [];
  39. if (empty($response)) {
  40. return $result;
  41. }
  42. // 先将所有国家/地区设为无效
  43. Country::query()->update(['status' => Country::STATUS_NO]);
  44. foreach ($response as $item) {
  45. // 使用 firstOrCreate 简化代码
  46. $country = Country::firstOrCreate(
  47. ['code' => $item['code']],
  48. [
  49. 'name' => $item['name'],
  50. 'code' => $item['code'],
  51. 'flag' => $item['flag'],
  52. 'status' => Country::STATUS_YES
  53. ]
  54. );
  55. // 如果已存在,更新状态和其他字段
  56. if (!$country->wasRecentlyCreated) {
  57. $country->update([
  58. 'name' => $item['name'],
  59. 'flag' => $item['flag'],
  60. 'status' => Country::STATUS_YES
  61. ]);
  62. }
  63. }
  64. return $result;
  65. }
  66. }