Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Models\Locale;
  3. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  4. use Squire\Model;
  5. /**
  6. * @property int $id
  7. * @property string $name
  8. * @property string $country_id
  9. * @property string $country_name
  10. * @property string $state_code
  11. * @property float $latitude
  12. * @property float $longitude
  13. */
  14. class State extends Model
  15. {
  16. public static array $schema = [
  17. 'id' => 'integer',
  18. 'name' => 'string',
  19. 'country_id' => 'string',
  20. 'country_name' => 'string',
  21. 'state_code' => 'string',
  22. 'latitude' => 'float',
  23. 'longitude' => 'float',
  24. ];
  25. public static function getStateOptions(?string $code = null): array
  26. {
  27. if (! $code) {
  28. return [];
  29. }
  30. return self::query()
  31. ->where('country_id', $code)
  32. ->orderBy('name')
  33. ->get()
  34. ->pluck('name', 'id')
  35. ->toArray();
  36. }
  37. public static function getSearchResultsUsing(string $search, ?string $countryCode = null): array
  38. {
  39. if (! $countryCode) {
  40. return [];
  41. }
  42. return self::query()
  43. ->where('country_id', $countryCode)
  44. ->where(static function ($query) use ($search) {
  45. $query->whereLike('name', "%{$search}%")
  46. ->orWhereLike('state_code', "%{$search}%");
  47. })
  48. ->orderByRaw('
  49. CASE
  50. WHEN state_code = ? THEN 1
  51. WHEN state_code LIKE ? THEN 2
  52. WHEN name LIKE ? THEN 3
  53. ELSE 4
  54. END
  55. ', [$search, $search . '%', $search . '%'])
  56. ->limit(50)
  57. ->get()
  58. ->pluck('name', 'id')
  59. ->toArray();
  60. }
  61. public function country(): BelongsTo
  62. {
  63. return $this->belongsTo(Country::class, 'country_id', 'id');
  64. }
  65. }