VacationType::class, "state" => VacationRequestState::class, "from" => "date", "to" => "date", ]; public function user(): BelongsTo { return $this->belongsTo(User::class); } public function yearPeriod(): BelongsTo { return $this->belongsTo(YearPeriod::class); } public function activities(): HasMany { return $this->hasMany(VacationRequestActivity::class); } public function vacations(): HasMany { return $this->hasMany(Vacation::class); } public function changeStateTo(VacationRequestState $state): void { $this->state = $state; $this->save(); } public function scopeStates(Builder $query, array $states): Builder { return $query->whereIn("state", $states); } public function scopeNoStates(Builder $query, array $states): Builder { return $query->whereNotIn("state", $states); } public function scopeOverlapsWith(Builder $query, self $vacationRequest): Builder { return $query->where("from", "<=", $vacationRequest->to) ->where("to", ">=", $vacationRequest->from); } protected static function newFactory(): VacationRequestFactory { return VacationRequestFactory::new(); } }