🎉 ¡Aprovecha el último descuento del año: 60% OFF en 2 planes!

10d - 15h - 40m - 29s'
Josadec Pedraza
Josadec Pedraza
Laravel
Comparte:

Livewire validation unique rule custom message

Que tal amigos,
Tengo el siguiente problema al intentar valdiar un regla unica, Lo que busco si exsite el en la DB que me regrese un menssaje personalizado donde pueda agregar algunas variables  por ejemplo el nombre del trabajo duplicado y la fecha de cracion entre otros datos
lo resolvi de la siguiente manera, pero no creo que sea la mejor ocpion a ver si me pueden ayudar 
Codigo de la clase del componente de livewire
public function rules():array
    {
        return [
            'estimate.branch_id' => ['required'],
            'estimate.job_name' =>['required',
                Rule::unique('estimates','job_name')->ignore($this->estimate)
            ],
            'estimate.slug' => ['required',
                Rule::unique('estimates','slug')->ignore($this->estimate)
            ],
            'estimate.stage_id' => ['required'],
            'estimate.takeoff_by' =>['required'],
            'estimate.date_completed' => ['nullable','date'],
            'estimate.estimator' => ['required'],
            'estimate.bid_date' => ['required','date'],
            'estimate.project_cost' => ['required'],
            'estimate.notes' => ['nullable','string']
        ];
    }

    public function getUniqueJobNameMessge()
    {
        $jobname = Estimate::where('job_name',$this->estimate->job_name)->first();
        if($jobname){
            $uniqueMessage = 'The :attribute is already in use. (Job: '
                .$jobname->job_name.' | Branch: '
                .$jobname->branch->short_name.' | TakeOff By: '
                .$jobname->takeoff_by.' | Created at: '
                .Carbon::parse($jobname->created_at)->format('m/d/Y').')';
        }else{
            $uniqueMessage = '';
        }
        return $uniqueMessage;
    }

    public function messages()
    {
        return [
            'estimate.job_name.unique' => $this->getUniqueJobNameMessge()
        ];
    }