user = $user; $this->startAt = $startAt; $this->endAt = $endAt; } /** * Determine if the validation rule passes. * * @param string $attribute * @param mixed $value * @param Closure $fail * @return void */ public function validate(string $attribute, mixed $value, Closure $fail): void { $alreadyExists = TimeInterval::where('user_id', optional($this->user)->id) ->where(function ($query) { $query ->whereBetween('start_at', [$this->startAt, $this->endAt]) ->orWhereBetween('end_at', [$this->startAt, $this->endAt]) ->orWhere(function ($query) { $query ->where('start_at', '<', $this->startAt) ->where('end_at', '>', $this->endAt); }); }) ->exists(); if ($alreadyExists) { $fail('validation.time_interval_already_exist')->translate(); } } }