Laravel telah menyediakan validasi agar data yang kita input harus berbeda dengan data yang sudah ada ( unique ). Implementasinya juga sangat mudah yaitu dengan menambahkan validasi pada controller
$validator = Validator::make($request->all(), [
'email' => 'email'|'unique:customers',
.....
]);
Kode diatas memvalidasi jika ada input email yang sama pada tabel customers, jika ada input email yang sama maka akan menampilkan error.
Namun bagaimana jika kita ingin mengupdate data telepon dengan email yang telah ada ? Jika kita mengrim email kita sekarang, maka akan terdeteksi input email ganda.
Contohnya :
Customer bernama Adi memiliki data berikut :
id : 1
email : adi@gmail.com
telepon : 0891982912
Case 1 :
Adi ingin mengubah nomor teleponya, maka ia akan mengirimkan data id, email dan telepon yang baru ke controller. Jika email diberi validasi
‘email’ => ‘email’|’unique:customers’
Maka email adi yang lama akan terdeteksi email unik dan akan membuat update data gagal.
Case 2 :
Tidak diberi validasi email, jika tidak diberi validasi maka Adi dapat mengubah telepon dan juga email baru. Namun ini berpotensi membuat data ganda pada database.
Solusi :
Solusi dari kasus tersebut ialah menggunakan :
$validator = Validator::make($request->all(), [
'email' => ['email',Rule::unique('users')->ignore($user->id, 'user_id')]
.....
]);
validasi diatas akan mengecualikan email Adi dengan mengirim id pada parameter ignore( ‘ id_adi’, ‘nama colomn id pada tabel‘ )
Dengan ini maka Adi dapat mengubah data telepon walau memasukkan email yang sama…