current() */ class Announcement extends BaseModel implements Auditable { use HasAudits; use HasFactory; final public const string TABLE = 'announcements'; final public const string ATTRIBUTE_CONTENT = 'content'; final public const string ATTRIBUTE_END_AT = 'end_at'; final public const string ATTRIBUTE_ID = 'announcement_id'; final public const string ATTRIBUTE_START_AT = 'start_at'; /** * The table associated with the model. * * @var string */ protected $table = Announcement::TABLE; /** * The primary key associated with the table. * * @var string */ protected $primaryKey = Announcement::ATTRIBUTE_ID; /** * The event map for the model. * * Allows for object-based events for native Eloquent events. * * @var array */ protected $dispatchesEvents = [ 'created' => AnnouncementCreated::class, 'deleted' => AnnouncementDeleted::class, 'updated' => AnnouncementUpdated::class, ]; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ Announcement::ATTRIBUTE_CONTENT, Announcement::ATTRIBUTE_END_AT, Announcement::ATTRIBUTE_START_AT, ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ Announcement::ATTRIBUTE_END_AT => 'datetime', Announcement::ATTRIBUTE_START_AT => 'datetime', ]; } public function getName(): string { return strval($this->getKey()); } public function getSubtitle(): string { return $this->getName(); } /** * Scope a query to only include current announcements. */ #[Scope] protected function current(Builder $query): void { $query->whereValueBetween(Date::now(), [ Announcement::ATTRIBUTE_START_AT, Announcement::ATTRIBUTE_END_AT, ]); } }