['required', 'integer', "min:{$minRating}", "max:{$maxRating}"], 'speed_rating' => ['nullable', 'integer', "min:{$minRating}", "max:{$maxRating}"], 'communication_rating' => ['nullable', 'integer', "min:{$minRating}", "max:{$maxRating}"], 'food_condition_rating' => ['nullable', 'integer', "min:{$minRating}", "max:{$maxRating}"], 'professionalism_rating' => ['nullable', 'integer', "min:{$minRating}", "max:{$maxRating}"], 'review' => ['nullable', 'string', "max:{$maxReviewLength}"], 'tags' => ['nullable', 'array'], 'tags.*' => ['string', 'max:50'], 'is_anonymous' => ['boolean'], 'is_restaurant_rating' => ['boolean'], ]; } /** * Get custom attributes for validator errors. */ public function attributes(): array { return [ 'overall_rating' => 'overall rating', 'speed_rating' => 'speed rating', 'communication_rating' => 'communication rating', 'food_condition_rating' => 'food condition rating', 'professionalism_rating' => 'professionalism rating', ]; } /** * Prepare the data for validation. */ protected function prepareForValidation(): void { $this->merge([ 'is_anonymous' => $this->boolean('is_anonymous'), 'is_restaurant_rating' => $this->boolean('is_restaurant_rating'), ]); } /** * Get validated category ratings as array. */ public function categoryRatings(): array { return array_filter([ 'speed' => $this->validated('speed_rating'), 'communication' => $this->validated('communication_rating'), 'food_condition' => $this->validated('food_condition_rating'), 'professionalism' => $this->validated('professionalism_rating'), ]); } }