'array', 'is_featured' => 'boolean', 'expires_at' => 'datetime', 'price' => 'decimal:2', 'latitude' => 'decimal:7', 'longitude' => 'decimal:7', 'status' => ListingStatus::class, ]; protected $appends = ['location']; public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logFillable() ->logOnlyDirty() ->dontSubmitEmptyLogs(); } public function category() { return $this->belongsTo(\Modules\Category\Models\Category::class); } public function user() { return $this->belongsTo(\App\Models\User::class); } public function registerMediaCollections(): void { $this->addMediaCollection('listing-images'); } protected function location(): Attribute { return Attribute::make( get: function (mixed $value, array $attributes): ?array { $latitude = $attributes['latitude'] ?? null; $longitude = $attributes['longitude'] ?? null; if ($latitude === null || $longitude === null) { return null; } return [ 'lat' => (float) $latitude, 'lng' => (float) $longitude, ]; }, set: fn (?array $value): array => [ 'latitude' => is_array($value) ? ($value['lat'] ?? null) : null, 'longitude' => is_array($value) ? ($value['lng'] ?? null) : null, ], ); } }