|null $context * @property string|null $subject_type * @property int|null $subject_id * @property Carbon $logged_at * @property Carbon $created_at * @property Carbon $updated_at */ class ActivityLog extends Model { /** @use HasFactory */ use HasFactory; protected $fillable = [ 'type', 'message', 'context', 'subject_type', 'subject_id', 'logged_at', ]; protected $casts = [ 'type' => ActivityTypeEnum::class, 'context' => 'array', 'logged_at' => 'datetime', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; /** * @return MorphTo */ public function subject(): MorphTo { return $this->morphTo(); } /** * @param Builder $query * @return Builder */ public function scopeOfType(Builder $query, ActivityTypeEnum $type): Builder { return $query->where('type', $type); } /** * @param Builder $query * @return Builder */ public function scopeSince(Builder $query, Carbon $since): Builder { return $query->where('logged_at', '>=', $since); } /** * @param Builder $query * @return Builder */ public function scopeLatestFirst(Builder $query): Builder { return $query->orderByDesc('logged_at')->orderByDesc('id'); } }