Laravel - Validate field unique in update

1

I have an enrollment field in the table that needs to be unique

NA MIGRATION

Schema::create('professors', function (Blueprint $table) {
        $table->increments('id');
        $table->boolean('inativo')->default(0);
        $table->string('matricula', 15)->unique();
        $table->string('nome', 200);
        $table->string('email', 180)->unique();
        $table->string('telefone1', 15);
        $table->string('telefone2', 15)->nullable();
        $table->string('obs', 400)->nullable();
        $table->string('file_path', 200)->nullable();
        $table->timestamps();
    });

NO REQUEST:

public function rules()
{
    return [
        'matricula' => 'required|unique:professors|max:15',
        'nome' => 'required|max:200',
        'email' => 'required|unique:professors|max:180',
        'telefone1' => 'required|max:15',
        'telefone2' => 'max:15',
        'obs' => 'max:400',
    ];
}

public function messages(){
    return [
        'matricula.required' => 'É necessário informar uma matricula para identificar o professor!',
        'matricula.max' => 'O número de matrícula excedeu a quantidade de caracteres (15) permitida!',
        'matricula.unique' => 'Ésta matrícula já está sendo utilizada por outro professor!',
        'nome.required' => 'É necessário informar um nome para o proifessor!',
        'nome.max' => 'O nome do professor excedeu a quantidade de caracteres (200) permitida!',
        'email.required' => 'É necessário informar um e-mail, que será o endereço para contato e notificações!',
        'email.max' => 'O e-mail excedeu a quantidade de caracteres (180) permitida!',
        'email.unique' => 'Éste e-mail já está sendo utilizado por outro professor!',
        'telefone1.required' => 'É necessário informar o telefone celular para contato!',
        'telefone1.max' => 'O telefone 1 excedeu a quantidade de caracteres (15) permitida!',
        'telefone2.max' => 'O telefone 2 excedeu a quantidade de caracteres (15) permitida!',
        'obs.max' => 'A observação excedeu a quantidade de caracteres (400) permitida!',
    ];
}  

METHOD NO CONTROLLER

public function update(ProfessorRequestUpdate $request, $id)
{
    $professor = Professor::where('id', $id)->get()->first();

    $professor->inativo = $request->inativo;

    if ($professor->matricula != $request->matricula) {
        $professor->matricula = $request->matricula;
    }

    $professor->nome = $request->nome;

    if ($professor->email != $request->email) {
        $professor->email = $request->email;
    }

    $professor->telefone1 = $request->telefone1;
    $professor->telefone2 = $request->telefone2;
    $professor->obs = $request->obs;

    if($request->hasFile('file_path') && $request->file('file_path')->isValid()) {

        if(!is_null($professor->file_path)) {
            Storage::delete('professors/' . $professor->file_path);
        }

        $professor->file_path = $request->file_path;

        $name = 'professors-'.$professor->id.'-'.kebab_case(strtolower($professor->nome));

        $extension = $request->file_path->extension();
        $nameFile = "{$name}.{$extension}";

        $professor->file_path = $nameFile;

        $upload = $request->file_path->storeAs('professors', $nameFile);

        $professor->save();

        if(!$upload)
            return redirect()
                ->route('cad/professores/lista')
                ->with(success, 'Sucesso ao carregar imagem');
    }else{
        $professor->file_path = $professor->file_path;
    }

    $professor->save();

    Session::flash('professors_Msg', 'Dados do professor atualizados com sucesso!');

    return redirect('cad/professores/lista');
}

But when I update, it does not accept that the same number is informed again, if I create another request without the unique to pass it gives error in the query, as I can proceed to accept it inform or skip this field if it is the same value?

    
asked by anonymous 10.05.2018 / 16:17

1 answer

3

You can force Laravel to ignore a ID while checking the single field, in which case you just need to pass the teacher id as the third parameter.

'matricula' => 'required|unique:professors,matricula,' . $request->id . '|max:15',

More information

    
10.05.2018 / 18:26