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?