*/ use HasFactory; protected $fillable = [ 'slot_id', 'idempotency_key', 'status', 'expires_at', 'confirmed_at', 'cancelled_at', ]; protected function casts(): array { return [ 'status' => HoldStatus::class, 'expires_at' => 'datetime', 'confirmed_at' => 'datetime', 'cancelled_at' => 'datetime', ]; } /** @return BelongsTo */ public function slot(): BelongsTo { return $this->belongsTo(Slot::class); } /** * Холды, занимающие место. Определение одно для проверки вместимости и * проекции доступности. * * @param Builder $query */ public function scopeActive(Builder $query): void { $query->where('status', HoldStatus::Held) ->where('expires_at', '>', now()); } public function isExpired(): bool { return $this->expires_at->isPast(); } }