Address.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Builder;
  4. use Illuminate\Database\Eloquent\Factories\HasFactory;
  5. use Illuminate\Database\Eloquent\Model;
  6. use Illuminate\Database\Eloquent\SoftDeletes;
  7. use Illuminate\Support\Facades\DB;
  8. /**
  9. * @property int $id
  10. * @property string $source
  11. * @property int $source_id
  12. * @property string $zip_code
  13. * @property string $address
  14. * @property bool $has_complement
  15. * @property string|null $complement
  16. * @property string|null $nickname
  17. * @property string|null $instructions
  18. * @property int|null $city_id
  19. * @property int|null $state_id
  20. * @property string $address_type
  21. * @property \Illuminate\Support\Carbon|null $created_at
  22. * @property \Illuminate\Support\Carbon|null $updated_at
  23. * @property \Illuminate\Support\Carbon|null $deleted_at
  24. * @property string|null $number
  25. * @property string|null $district
  26. * @property bool $is_primary
  27. * @property float|null $latitude
  28. * @property float|null $longitude
  29. * @property-read \App\Models\City|null $city
  30. * @property-read \App\Models\State|null $state
  31. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address newModelQuery()
  32. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address newQuery()
  33. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address onlyTrashed()
  34. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address query()
  35. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereAddress($value)
  36. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereAddressType($value)
  37. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereCityId($value)
  38. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereComplement($value)
  39. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereCreatedAt($value)
  40. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereDeletedAt($value)
  41. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereDistrict($value)
  42. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereHasComplement($value)
  43. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereId($value)
  44. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereInstructions($value)
  45. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereIsPrimary($value)
  46. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereLatitude($value)
  47. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereLongitude($value)
  48. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereNickname($value)
  49. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereNumber($value)
  50. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereSource($value)
  51. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereSourceId($value)
  52. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereStateId($value)
  53. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereUpdatedAt($value)
  54. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address whereZipCode($value)
  55. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address withTrashed(bool $withTrashed = true)
  56. * @method static \Illuminate\Database\Eloquent\Builder<static>|Address withoutTrashed()
  57. * @mixin \Eloquent
  58. */
  59. class Address extends Model
  60. {
  61. use HasFactory, SoftDeletes;
  62. protected $fillable = [
  63. 'source',
  64. 'source_id',
  65. 'zip_code',
  66. 'address',
  67. 'number',
  68. 'district',
  69. 'has_complement',
  70. 'complement',
  71. 'nickname',
  72. 'instructions',
  73. 'city_id',
  74. 'state_id',
  75. 'address_type',
  76. 'is_primary',
  77. 'latitude',
  78. 'longitude',
  79. ];
  80. protected $casts = [
  81. 'has_complement' => 'boolean',
  82. 'is_primary' => 'boolean',
  83. 'latitude' => 'float',
  84. 'longitude' => 'float',
  85. 'created_at' => 'datetime',
  86. 'updated_at' => 'datetime',
  87. 'deleted_at' => 'datetime',
  88. ];
  89. public static function preferredForProvider(): Builder
  90. {
  91. return static::select('*', DB::raw('ROW_NUMBER() OVER (PARTITION BY source_id ORDER BY is_primary DESC, id DESC) as rn'))
  92. ->where('source', 'provider');
  93. }
  94. public function city()
  95. {
  96. return $this->belongsTo(City::class)->select('id', 'name');
  97. }
  98. public function state()
  99. {
  100. return $this->belongsTo(State::class)->select('id', 'name', 'code');
  101. }
  102. }