Gender::class, 'birth_date' => 'date:Y-m-d', ]; } public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logAll() ->logOnlyDirty() ->dontLogEmptyChanges(); } protected function formattedBirthDate(): Attribute { return Attribute::make( get: fn () => $this->birth_date?->translatedFormat('l, d F Y'), ); } protected function genderLabel(): Attribute { return Attribute::make( get: fn () => $this->gender?->label(), ); } protected function formattedPhoneNumber(): Attribute { return Attribute::make( get: fn () => $this->phone_number ? substr($this->phone_number, 0, 4).' '.substr($this->phone_number, 4, 4).' '.substr($this->phone_number, 8) : null, set: fn (?string $value) => $value ? preg_replace('/\s/', '', $value) : null, ); } #[Scope] protected function female(Builder $query): void { $query->where('gender', Gender::FEMALE); } #[Scope] protected function hasPhoneNumber(Builder $query): void { $query->whereNotNull('phone_number'); } #[Scope] protected function male(Builder $query): void { $query->where('gender', Gender::MALE); } public function user(): BelongsTo { return $this->belongsTo(User::class); } }